Как я могу взять определенную строку в большом файле, который имеет много похожих строк, используя Python? - PullRequest
1 голос
/ 19 мая 2011

имеют разные файлы с одинаковыми именами в разных каталогах. В этих файлах есть строки, которые почти равны, я хотел бы вынуть только последнюю из этих строк (после нее есть больше строк) и записать ее в другой файл.

Пока что я сделал:

#!/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

Любая идея или предложение будут очень признательны.

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

Не уверен насчет ошибки, которую вы получаете (после вашего последнего редактирования).

Я попытался немного переписать код, надеюсь, он даст вам результат, аналогичный тому, что вам нужно (ВНИМАНИЕ: не проверено).

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]))        
0 голосов
/ 20 мая 2011

Полагаю, вы не закрываете свои файлы.

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]))
...