Cat, grep и cut - перевод на python

возможно, для этого достаточно вопросов и/или решений, но я просто не могу помочь себе в этом вопросе: у меня есть следующая команда, которую я использую в bash - script:

var=$(cat "$filename" | grep "something" | cut -d'"' -f2)    

Теперь, из-за некоторых проблем, я должен перевести весь код на python. Я никогда раньше не использовал python, и я совершенно не знаю, как я могу делать то, что делают команды postet. Любые идеи, как решить это с помощью python?

Ответ 1

Вам нужно лучше понять язык python и его стандартную библиотеку для перевода выражения

cat "$filename" : читает файл cat "$filename" и выгружает содержимое в stdout

|: pipe перенаправляет stdout из предыдущей команды и передает ее в stdin следующей команды

grep "something" : Ищет регулярное выражение something файла текстовых данных (если указано) или в stdin и возвращает соответствующие строки.

cut -d '"' -f2: разделяет строку с конкретным разделителем и индексирует/связывает определенные поля из результирующего списка

Эквивалент 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

Ответ 2

В Python без внешних зависимостей это что-то вроде этого (untested):

with open("filename") as origin:
    for line in origin:
        if not "something" in line:
           continue
        try:
            print line.split('"')[1]
        except IndexError:
            print

Ответ 3

вам нужно использовать модуль os.system для выполнения команды оболочки

import os
os.system('command')

если вы хотите сохранить вывод для последующего использования, вам нужно использовать subprocess module

import subprocess
child = subprocess.Popen('command',stdout=subprocess.PIPE,shell=True)
output = child.communicate()[0]

Ответ 4

Вам нужна петля над строками файла, вам нужно узнать о строковых методах

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)

и вам нужно метод передачи имени файла в вашу программу python, и пока вы на нем, возможно, также строка для поиска...

В будущем, попробуйте задать более целенаправленные вопросы, если сможете,

Ответ 5

Для перевода команды на питон см. ниже: -

1) Альтернатива команды cat открыта ссылается на это. Ниже приведен образец

>>> f = open('workfile', 'r')
>>> print f

2) Альтернатива команды grep содержит this

3) Альтернатива команды Cut ссылается this