peut-être y a-t-il assez de questions et/ou de solutions pour cela, mais je ne peux tout simplement pas m'en empêcher, avec une 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 auparavant et je ne sais absolument pas comment je peux faire ce que font les commandes postet. Des idées pour résoudre ce problème avec python?
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 transfère le contenu sur stdout
|
: pipe redirige le stdout
de la commande précédente et le transmet au stdin
de la commande suivante
grep "quelque chose" : Recherche dans 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/épisse 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)
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, cela ressemble à 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 le module subprocess
import subprocess
child = subprocess.Popen('command',stdout=subprocess.PIPE,Shell=True)
output = child.communicate()[0]
Pour traduire la commande en python, voir ci-dessous: -
1) La variante de la commande cat est ouverte reportez-vous à ceci . Voici l'échantillon
>>> f = open('workfile', 'r')
>>> print f
2) Alternative de la commande grep se référer this
3) Alternative de la commande Couper se référer this
Vous avez besoin d'une boucle sur les lignes d'un fichier, vous devez en apprendre plus sur méthodes de chaîne
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 ne méthode pour passer le nom du fichier à votre python) et, pendant que vous y êtes, peut-être aussi la chaîne à rechercher ...
Pour l’avenir, essayez de poser des questions plus ciblées si vous le pouvez,