Python: фильтровать строки из текстового файла, которые содержат определенное слово - PullRequest
11 голосов
/ 09 марта 2011

В Python я хочу написать программу, которая фильтрует строки из моего текстового файла, которые содержат слово «яблоко», и записывает эти строки в новый текстовый файл. То, что я пробовал, просто пишет слово «яблоко» в моем новом текстовом файле, тогда как я хочу целые строки. Я новичок в Python, поэтому, пожалуйста, ответьте на мой вопрос, так как мне это действительно нужно.

Ответы [ 5 ]

20 голосов
/ 09 марта 2011

Использование может получить все строки, содержащие 'apple', используя список-понимание:

[ line for line in open('textfile') if 'apple' in line]

Итак, также в одной строке кода вы можете создать новый текстовый файл:

open('newfile','w').writelines([ line for line in open('textfile') if 'apple' in line])

И эйкем прав: определенно быстрее сохранить его в качестве итератора и написать

open('newfile','w').writelines(line for line in open('textfile') if 'apple' in line)
10 голосов
/ 09 марта 2011
from itertools import ifilter

with open('source.txt','rb') as f,open('new.txt','wb') as g:

    g.writelines( ifilter(lambda line: 'apple' in line, f))
8 голосов
/ 09 марта 2011

Используя генераторы, это экономит память и быстро

def apple_finder(file):
    for line in file:
        if 'apple' in line:
             yield line


source = open('forest','rb')

apples = apple_finder(source)

Я люблю простые решения без повреждения мозга для чтения: -)

1 голос
/ 09 марта 2011

if "apple" in line: должно работать.

0 голосов
/ 25 ноября 2018

Для Python3 - здесь работает и быстрый пример

with open('input.txt', 'rb') as file_in:
    with open("output.txt", "wb") as file_out:
        file_out.writelines(filter(lambda line: b'lines with this text' in line, file_in))
...