имеют разные файлы с одинаковым именем, в разных каталогах. В этих файлах есть строки, которые почти равны, я бы хотел вынуть только последнюю строку из них (после нее больше строк) и записать ее в другой файл.
До сих пор я сделал:
#!/usr/bin/env python
import os
def cd_grep():
for file in os.listdir("."):
if os.path.isfile(file):
for line in open("graph.txt"):
if " 4.49" in line:
line_list=[line]
g = open('comparation','a')
g.write ("%s" % (line[0:4]))
g.close()
os.chdir('4.294')
cd_grep()
os.chdir(os.pardir)
os.chdir('4.394')
cd_grep()
os.chdir(os.pardir)
os.chdir('4.494')
cd_grep()
os.chdir(os.pardir)
os.chdir('4.594')
cd_grep()
os.chdir(os.pardir)
os.chdir('4.694')
cd_grep()
Я создал список, потому что я собираюсь взять только определенную информацию всей строки.
Наконец, я понял, что эта процедура работает только для небольших файлов и только в том случае, если последняя строка файла содержит термин, который я ищу.
Для больших файлов я получил это сообщение (внутри файла, на который я надеялся получить строку):
Коммутаторы добровольного контекста: 3403
Любая идея или предложение будут очень оценены.
Не уверен в ошибке, которую вы получаете (после вашего последнего редактирования).
Я попытался немного переписать код, надеюсь, что он даст вам результат, похожий на то, что вам нужно (ВНИМАНИЕ: не проверено).
with open ('comparation', 'a') as write_file:
for path, dirs, files in os.walk(os.getcwd()):
for filename in [f for f in files if f == "graph.txt"]:
filepath = os.path.abspath(os.path.join(path, filename))
with open(filepath) as f:
for line in f:
if " 4.49" in line:
last = line
write_file.write("File: %s, Line: %s\n" % (filepath, last[0:4]))
Я предполагаю, что вы не закрываете свои файлы.
def cd_grep():
for file in os.listdir("."):
if os.path.isfile(file):
graph_file = open('graph.txt'):
for line in graph_file:
if " 4.49" in line:
line_list=[line]
graph_file.close()
g = open('comparation','a')
g.write ("%s" % (line[0:4]))
g.close()
Или гораздо лучше использовать with
для открытия (и всегда закрытия) ваших файлов.
def cd_grep():
for file in os.listdir("."):
if os.path.isfile(file):
with open('graph.txt') as graph_file:
for line in graph_file:
if " 4.49" in line:
line_list=[line]
with open('comparation','a') as g:
g.write ("%s" % (line[0:4]))