过滤文本文件中包含特定单词的行
我想编写一个程序,过滤文本文件中包含单词“apple”的行,并将这些行写入新的文本文件中。
我所尝试的只是在新文本文件中写入“apple”一词,而我想要整行。
I want to write a program which filters the lines from my text file which contain the word "apple" and write those lines into a new text file.
What I have tried just writes the word "apple" in my new text file, whereas I want whole lines.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
使用可以使用列表理解获取包含“apple”的所有行:
因此 - 同样在一个代码行中 - 您可以创建新的文本文件:
并且 eyquem 是对的:将其保留为迭代器并写入肯定会更快
Use can get all lines containing 'apple' using a list-comprehension:
So - also in one code-line - you can create the new textfile:
And eyquem is right: it's definitely faster to keep it as an iterator and write
使用生成器,内存效率高且速度快,
我喜欢简单的解决方案,不会对阅读造成脑损伤:-)
Using generators, this is memory efficient and fast
I love easy solutions with no brain damage for reading :-)
对于Python3 - 这是有效且快速的示例
测试:
input.txt:
output.txt:
有关代码的更多信息:
b'line contains text'
-b< /code> 表示
binary
,我们对这种字符串进行操作,跳过一些编码等问题。官方文档: https://docs.python.org /3/library/stdtypes.html?highlight=binary#bytes-objects
rb
wb
- 对read
和进行操作>使用
操作二进制
类似对象进行写入官方文档: https://docs.python.org/3/library /io.html#binary-io
filter()
- 采用表达式
和可迭代对象
。返回过滤后的对象。在我们的示例中,filter
获取所有行(可迭代对象
),并为每行应用lambda
通知filter
(如果给定)line
是否应该返回。lambda
- 包含两个元素参数
:表达式
。在我们的示例中,lambda
检查line
是否包含给定的文本
。检查表达式
后返回True
或False
。使用
lambda
和filter
的示例:https://blog.finxter.com/how-to-filter-in-python-using-lambda-functions/For Python3 - here is working and fast example
Tests:
input.txt:
output.txt:
More about code:
b'line contains text'
- theb
states forbinary
and we operating on this kind of string skipping some problems with encoding etc.Official docs: https://docs.python.org/3/library/stdtypes.html?highlight=binary#bytes-objects
rb
wb
- operating onread
andwrite
operation withbinary
like objectsOfficial docs: https://docs.python.org/3/library/io.html#binary-i-o
filter()
- takesexpression
anditerable object
. Returns filtered object. In our examplefilter
takes all lines (iterable object
) and apply for each linelambda
what informfilter
if givenline
should be returned or not.lambda
- contains two elementsargument
:expression
. In our examplelambda
check ifline
contains giventext
. ReturnTrue
orFalse
afterexpression
check.Example with
lambda
andfilter
: https://blog.finxter.com/how-to-filter-in-python-using-lambda-functions/if "apple" in line:
应该可以工作。if "apple" in line:
should work.