web-dev-qa-db-fra.com

chat, grep et cut - traduit en python

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?

34
dnc

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)

La 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
71
Abhijit

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
8
Paulo Scardine

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]
5
Hackaholic

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

2
Hussain Shabbir

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,

2
gboffi