从文本文件中筛选包含特定单词的行

21 投票
5 回答
88416 浏览
提问于 2025-04-16 13:20

我想写一个程序,从我的文本文件中筛选出包含“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)

撰写回答