Python:从文本文件中过滤包含特定单词的行

ahm*_*mad 11 python line filter

在Python,我想编写一个程序,它过滤从我的文本文件,该文件包含"苹果",写这些行成一个新的文本文件中的行.我试过的只是在我的新文本文件中写了"apple"这个词,而我想要整行.我是Python的初学者,所以请回答我的问题,因为我真的需要这个.

phy*_*nfo 20

使用可以使用list-comprehension获取包含'apple'的所有行:

[ line for line in open('textfile') if 'apple' in line]
Run Code Online (Sandbox Code Playgroud)

所以 - 也可以在一个代码行中 - 创建新的文本文件:

open('newfile','w').writelines([ line for line in open('textfile') if 'apple' in line])
Run Code Online (Sandbox Code Playgroud)

而eyquem是对的:将它作为迭代器和写入来保持它肯定更快

open('newfile','w').writelines(line for line in open('textfile') if 'apple' in line)
Run Code Online (Sandbox Code Playgroud)

  • 列表理解创建一个对象.使用生成器表达式会更好.顺便说一句,它可以写成``writelines(行中的行('textfile'),如果'apple'在行中)`` (4认同)

eyq*_*uem 10

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))
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`itertools.ifilter` 在 Python 3.5+ 中已被删除,并替换为内置的 `filter`https://docs.python.org/3/library/functions.html#filter,这相当于到 phynfo 答案中的生成器表达式。 (4认同)

Mar*_*sar 8

使用生成器,这是内存高效和快速

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


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

apples = apple_finder(source)
Run Code Online (Sandbox Code Playgroud)

我喜欢简单的解决方案,没有脑损伤阅读:-)


pba*_*ski 6

对于Python3 - 这是有效且快速的示例

    text = b'line contains text'
    with open('input.txt', 'rb') as file_in:
        with open('output.txt', 'wb') as file_out:
            file_out.writelines(
                filter(lambda line: text in line, file_in)
            )
Run Code Online (Sandbox Code Playgroud)

测试:

输入.txt:

Test line contains text
Not line not contains this text

HEY
Another line contains text
Run Code Online (Sandbox Code Playgroud)

输出.txt:

Test line contains text
Another line contains text
Run Code Online (Sandbox Code Playgroud)

更多关于代码:

b'line contains text'-我们对这种字符串进行操作的b状态,跳过编码等方面的一些问题 。官方文档:https://docs.python.org/3/library/stdtypes.html ?highlight=binary#bytes-objectsbinary

rb wb- 对类似对象进行操作readwrite操作 官方文档:https ://docs.python.org/3/library/io.html#binary-iobinary

filter()- 需要expressioniterable object。返回过滤后的对象。在我们的示例中,filter采用所有行 ( iterable object) 并应用于每一行lambda,告知filter是否line应返回给定值。

lambda- 包含两个元素argumentexpression. 在我们的示例中lambda检查是否line包含给定的text。返回True或检查Falseexpression

lambda和的示例filter: https: //blog.finxter.com/how-to-filter-in-python-using-lambda-functions/