从文本文件中筛选包含特定单词的行
我想写一个程序,从我的文本文件中筛选出包含“apple”这个词的行,然后把这些行写入一个新的文本文件。
我之前尝试的代码只把“apple”这个词写到了新文件里,但我其实想要的是整行内容。
5 个回答
11
使用生成器,这样做既节省内存又快速。
def apple_finder(file):
for line in file:
if 'apple' in line:
yield line
source = open('forest','rb')
apples = apple_finder(source)
我喜欢简单的解决方案,读起来毫不费脑子 :-)
12
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会继续运行。比如说,如果你想让程序在用户输入一个正确的密码后才允许他们进入,这就是一个条件判断的例子。
条件判断通常用“如果……那么……”的结构来表示。比如,我们可以说:“如果用户输入的密码是正确的,那么就允许他们登录。”这样,程序就会检查用户输入的内容,只有在满足条件时才会执行后面的操作。
在代码中,这种条件判断通常用一些特定的语法来实现。你可能会看到一些像“if”这样的关键词,它们就是用来表示条件的。通过这些条件,程序可以做出不同的反应,从而实现更复杂的功能。
总之,条件判断是编程中非常重要的一部分,它帮助程序根据不同的情况做出不同的决策。
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))
36
你可以用一种叫做列表推导的方法,快速找到所有包含“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])
而且eyquem说得对:把它保持为一个迭代器确实会更快,并且可以写入:
open('newfile','w').writelines(line for line in open('textfile') if 'apple' in line)