2011-03-09 123 views
8

在Python,我想編寫一個程序,它過濾從我的文本文件,該文件包含「蘋果」,寫這些行成一個新的文本文件中的行。我試過的只是在我的新文本文件中寫下「蘋果」一詞,而我想要整行。我是一名Python初學者,請回復我的問題,因爲我真的需要這個。的Python:從文本文件過濾線,包含特定單詞

回答

16

使用可以得到包含使用列表理解「蘋果」的所有行:

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

所以 - 也是一個代碼行 - 你可以創建新的文本文件:

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) 
+3

列表解析創建一個對象。使用生成器表達式會更好。順便說一下,它可以寫成'''writelines'(line for line in open('textfile')if'apple'in line)' – eyquem 2011-03-09 12:03:56

+0

@eyquem:好吧,我完全同意 - 對於大文件 - 它應該是更好的使用發電機,因爲發電機懶洋洋的行爲,從而犯規消耗那麼多的內存。但是對於小文件來說,列表理解是更快的解決方案? – phynfo 2011-03-09 12:23:53

+0

@Phynfo:沒......讓事情作爲發電機/迭代器效率高得多。該列表理解仍然是創建迭代器,然後將其填充列表,一旦完全通過該列表writelines該把它放回迭代器。 – 2015-11-04 00:46:16

1

if "apple" in line:應該管用。

8
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)) 
5

使用生成器,這是內存高效,快速

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


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

apples = apple_finder(source) 

我愛無腦損傷簡單的解決方案,用於讀取:-)

+1

函數** apple_finder(文件)**是一個函數發生器,**蘋果**是一個發生器。後者做同樣的工作如**的IFilter(拉姆達行:「蘋果」線,F)**在兩行(包括進口) – eyquem 2011-03-09 12:39:12

相關問題