cat, grep et cut-traduit en python
peut-être qu'il y a assez de questions et/ou de solutions pour cela, mais je ne peux pas m'en empêcher avec cette seule question: j'ai la commande suivante que j'utilise dans un script bash:
var=$(cat "$filename" | grep "something" | cut -d'"' -f2)
maintenant, à cause de certains problèmes, je dois traduire tout le code en python. Je n'ai jamais utilisé python avant et je n'ai absolument aucune idée comment je peux faire ce que les commandes postet font. Des idées pour résoudre ça avec python?
5 réponses
vous devez avoir une meilleure compréhension du langage python et de sa bibliothèque standard pour traduire l'expression
cat" $filename " : lit le fichier cat "$filename"
et renvoie le contenu à stdout
|
: pipe redirige le stdout
de la commande précédente et l'alimente au stdin
de la commande suivante
grep "something " : recherche l'expression régulière something
fichier de données en texte brut (si spécifié) ou dans le stdin et renvoie les lignes correspondantes.
cut-d' "'- f2 : divise la chaîne avec le délimiteur spécifique et indexe / divise des champs particuliers de la liste résultante
Équivalent Python
cat "$filename" | with open("$filename",'r') as fin: | Read the file Sequentially
| for line in fin: |
-----------------------------------------------------------------------------------
grep 'something' | import re | The python version returns
| line = re.findall(r'something', line)[0] | a list of matches. We are only
| | interested in the zero group
-----------------------------------------------------------------------------------
cut -d'"' -f2 | line = line.split('"')[1] | Splits the string and selects
| | the second field (which is
| | index 1 in python)
combinaison
import re
with open("filename") as origin_file:
for line in origin_file:
line = re.findall(r'something', line)
if line:
line = line[0].split('"')[1]
print line
en Python, sans dépendances externes, c'est quelque chose comme ceci (non testé):
with open("filename") as origin:
for line in origin:
if not "something" in line:
continue
try:
print line.split('"')[1]
except IndexError:
print
vous devez utiliser os.system
module pour exécuter la commande shell
import os
os.system('command')
si vous souhaitez enregistrer la sortie pour une utilisation ultérieure, vous devez utiliser subprocess
module
import subprocess
child = subprocess.Popen('command',stdout=subprocess.PIPE,shell=True)
output = child.communicate()[0]
pour traduire la commande en python référez-vous ci-dessous: -
1) Alternative de la commande cat est ouverte refer this . Ci-dessous, l'échantillon
>>> f = open('workfile', 'r')
>>> print f
2)variante de la commande grep renvoyer this
3)variante de la commande de coupure se référer à this
Vous avez besoin d'une boucle sur les lignes d'un fichier, vous avez besoin d'apprendre au sujet de méthodes string
with open(filename,'r') as f:
for line in f.readlines():
# python can do regexes, but this is for s fixed string only
if "something" in line:
idx1 = line.find('"')
idx2 = line.find('"', idx1+1)
field = line[idx1+1:idx2-1]
print(field)
et vous avez besoin de une méthode pour passer le nom de fichier à votre programme python et pendant que vous y êtes, peut-être aussi la chaîne de caractères à rechercher...
pour l'avenir, essayez de poser des questions plus ciblées si vous le pouvez,