Я попытался прочитать текстовый файл и найти строки, которые содержат определенное слово «checkout_revision». Я хочу найти эти строки одну за другой в цикле for и сохранить их в моей переменной, скажем, temp. Я слышал grep
с cut
подходит для этого. Однако я не мог этого сделать. Есть ли кто-нибудь, чтобы помочь мне? Вот мой код:
for line in intersect:
cmd=""" grep "CHECKOUT_REVISION" |cut -d\'\"\' -f2"""%fst_directory
cmd_test=os.system(cmd)
Предположим, что есть файл /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']
result = []
for line in open('filename'):
if 'CHECKOUT_REVISION' in line:
result.append(line.split('\'"\'')[1])
Я предполагаю, что это - то, что Вы хотите - Вы получаете список строк со вторым полем каждой строки, которые содержат строку CHECKOUT_REVISION
. Вопрос должен быть перемещен в stackoverflow все же.
Я согласен, что ответ Стефа - хороший ответ, но если вы все еще хотите использовать команды 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
Вдохновленный вышеупомянутыми ответами, вот версия командной строки.
#!/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