Удалить строки из текстового файла, которые не содержат определенную строку с Python - PullRequest
0 голосов
/ 30 ноября 2010

Я пытаюсь сформировать файл кавычек с определенным именем пользователя в файле журнала. Как удалить каждую строку, в которой нет определенного имени пользователя? Или как мне записать все строки, содержащие это имя пользователя, в новый файл?

Ответы [ 4 ]

4 голосов
/ 30 ноября 2010
with open('input.txt', 'r') as rfp:
  with open('output.txt', 'w') as wfp:
    for line in rfp:
      if ilikethis(line):
        wfp.write(line)
3 голосов
/ 30 ноября 2010
with open(logfile) as f_in:
    lines = [l for l in f_in if username in l]
with open(outfile, 'w') as f_out:
    f_out.writelines(lines)

Или, если вы не хотите хранить все строки в памяти

with open(logfile) as f_in:
    lines = (l for l in f_in if username in l)
    with open(outfile, 'w') as f_out:
        f_out.writelines(lines)

Мне больше нравится первая, но для большого файла она может перетаскиваться.

2 голосов
/ 30 ноября 2010

Что-то в этой строке должно быть достаточно:

newfile = open(newfilename, 'w')
for line in file(filename, 'r'):
    if name in line:
        newfile.write(line)
newfile.close()

См .: http://docs.python.org/tutorial/inputoutput.html#methods-of-file-objects

f.readlines () возвращает список, содержащий все строки данных в файле.

Альтернативный подход к чтению строк заключается в циклическом перемещении по объекту файла.Это экономит память, быстро и приводит к более простому коду

>>> for line in f:
        print line

Также вы можете проверить использование ключевого слова with.Преимущество в том, что файл правильно закрывается после завершения его набора

>>> with open(filename, 'r') as f:
...     read_data = f.read()
>>> f.closed
True
1 голос
/ 30 ноября 2010

Я знаю, что вы просили Python, но если вы работаете в Unix, это работа для grep.

grep name file

Если вы не в Unix, хорошо ... ответ выше даеттрюк:)

...