的Python:从文本文件过滤线,包含特定单词
问题描述:
在Python,我想编写一个程序,它过滤从我的文本文件,该文件包含“苹果”,写这些行成一个新的文本文件中的行。我试过的只是在我的新文本文件中写下“苹果”一词,而我想要整行。我是一名Python初学者,请回复我的问题,因为我真的需要这个。的Python:从文本文件过滤线,包含特定单词
答
使用可以得到包含使用列表理解“苹果”的所有行:
[ 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)
答
if "apple" in line:
应该管用。
答
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))
答
使用生成器,这是内存高效,快速
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
列表解析创建一个对象。使用生成器表达式会更好。顺便说一下,它可以写成'''writelines'(line for line in open('textfile')if'apple'in line)' – eyquem 2011-03-09 12:03:56
@eyquem:好吧,我完全同意 - 对于大文件 - 它应该是更好的使用发电机,因为发电机懒洋洋的行为,从而犯规消耗那么多的内存。但是对于小文件来说,列表理解是更快的解决方案? – phynfo 2011-03-09 12:23:53
@Phynfo:没......让事情作为发电机/迭代器效率高得多。该列表理解仍然是创建迭代器,然后将其填充列表,一旦完全通过该列表writelines该把它放回迭代器。 – 2015-11-04 00:46:16