【发布时间】:2020-08-25 08:35:55
【问题描述】:
使用 python 在大量文本文件中搜索字符串出现的“最佳”方法是什么?
据我了解,我们可以使用以下内容:
for f in files:
with open("file.txt") as f:
for line in f:
# do stuff
Python 在后台将文件缓存在块中,因此 IO 损失远没有乍看之下那么严重。如果我最多只能阅读几个文件,这是我的首选。
但对于文件列表(或 os.walk),我也可以执行以下操作:
for f in files:
with open("file.txt") as f:
lines = list(f)
for line in lines:
#do stuff
# Or a variation on this
如果我有数百个文件要读取,我想在扫描它们之前将它们全部加载到内存中。这里的逻辑是将文件访问时间保持在最低限度(并让操作系统发挥其文件系统的魔力)并保持逻辑最小化,因为 IO 通常是瓶颈。这显然会消耗更多内存,但它会提高性能吗?
我的假设是否正确和/或有更好的方法来做到这一点?如果没有明确的答案,在 python 中衡量这个的最佳方法是什么?
【问题讨论】:
-
" 但它会提高性能吗?"嗯,这是一个经验问题。你介绍过它吗?
-
这取决于很多你无法控制的因素——例如文件的大小、文件系统和 Python 缓存、内存大小等——你最好只使用直接的- forward 方法并让系统负责其余的工作。如果您确实需要从程序中榨取最后一点性能,那么请使用分析,但我的感觉是,与从最佳解决方案中获得的收益相比,您将浪费更多时间尝试优化程序。
标签: python performance performance-testing