web-dev-qa-db-ja.com

特定の単語を含むテキストファイルから行をフィルタリングする

「Apple」という単語を含むテキストファイルの行をフィルタリングして、それらの行を新しいテキストファイルに書き込むプログラムを作成したいと思います。

私が試したのは、新しいテキストファイルに「Apple」という単語を書き込むだけですが、行全体が必要です。

11
ahmad

リスト内包表記を使用すると、「Apple」を含むすべての行を取得できます。

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

したがって、1つのコード行でも新しいテキストファイルを作成できます。

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

そして、eyquemは正しいです:それをイテレータとして保持し、書く方が間違いなく速いです

open('newfile','w').writelines(line for line in open('textfile') if 'Apple' in line)
20
phynfo
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))
10
eyquem

ジェネレータを使用すると、これはメモリ効率が高く高速です

def Apple_Finder(file):
    for line in file:
        if 'Apple' in line:
             yield line


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

apples = Apple_Finder(source)

私は読書のための脳の損傷のない簡単な解決策が大好きです:-)

8
Mario César

Pythonの場合-これは動作している高速な例です

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))
2
pbaranski

if "Apple" in line:は機能するはずです。

1
neil