Команды Bash Cut и Grep через Python

Я попытался прочитать текстовый файл и найти строки, которые содержат определенное слово «checkout_revision». Я хочу найти эти строки одну за другой в цикле for и сохранить их в моей переменной, скажем, temp. Я слышал grep с cut подходит для этого. Однако я не мог этого сделать. Есть ли кто-нибудь, чтобы помочь мне? Вот мой код:

for line in intersect:
        cmd=""" grep "CHECKOUT_REVISION" |cut -d\'\"\' -f2"""%fst_directory
        cmd_test=os.system(cmd)
2
задан 24 August 2013 в 00:06

4 ответа

Предположим, что есть файл /home/eday/test.txt с содержанием ниже:

this is a test


another line

CHECKOUT_REVISION this must be stored

some other things
CHECKOUT_REVISION another line to store

Следующий скрипт Python прочитает файл, сохраненный в переменной my_file, в поисках того, что хранится в переменной look_for, и если он находит совпадение, он сохраняет его в переменной temp, которая является переменной списка.

Наконец, он выведет на выход содержимое temp. Вы можете закомментировать или удалить строку печати. ​​

#!/usr/bin/env python

# path to the file to read from
my_file = "/home/eday/test.txt"
# what to look in each line
look_for = "CHECKOUT_REVISION"
# variable to store lines containing CHECKOUT_REVISION
temp = []

with open(my_file, "r") as file_to_read:
    for line in file_to_read:
        if look_for in line:
            temp.append(line)

# print the contents of temp variable
print (temp)

приведенный выше скрипт будет иметь следующий вывод в терминале:

$ ['CHECKOUT_REVISION this must be stored', 'CHECKOUT_REVISION another line to store']
0
ответ дан 24 August 2013 в 00:06
result = []
for line in open('filename'):
    if 'CHECKOUT_REVISION' in line:
        result.append(line.split('\'"\'')[1])

Я предполагаю, что это - то, что Вы хотите - Вы получаете список строк со вторым полем каждой строки, которые содержат строку CHECKOUT_REVISION. Вопрос должен быть перемещен в stackoverflow все же.

1
ответ дан 24 August 2013 в 00:06

Я согласен, что ответ Стефа - хороший ответ, но если вы все еще хотите использовать команды grep или cut (или другие) из bash в python Я предлагаю вам использовать не os.system, а использовать модуль subprocess . Например:

#!/usr/bin/env python

import subprocess

cmd = "grep CHECKOUT_REVISION /home/eday/test.txt | cut -d'\"' -f2 -s"
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
temp = process.communicate()[0]

print (temp)

Если файл /home/eday/test.txt выглядит примерно так:

some lines
CHECKOUT_REVISION="revision one"
some other lines
CHECKOUT_REVISION="revision two"
other lines

, вывод приведенного выше скрипта Python будет:

revision one
revision two
0
ответ дан 24 August 2013 в 00:06

Вдохновленный вышеупомянутыми ответами, вот версия командной строки.

#!/usr/bin/env python

import sys

pattern = sys.argv[1]
fileName = sys.argv[2]


count=0
temp = []

with open(fileName, "r") as file_to_read:
    for line in file_to_read:
        if pattern in line:
           #IN case you want to have number of hits
           count=count+1
           temp.append(line)



for i in range(count):
    print (temp[i].rstrip())

Выполните его как:

python "pattern" thisScript.py 
1
ответ дан 24 August 2013 в 00:06

Другие вопросы по тегам:

Похожие вопросы: