在python中高效地读取文本文件



什么是"最好的";使用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中测量这一点的最佳方法是什么?

这是过早的优化吗?

你真的描述了整个过程吗?真的需要加快速度吗?请参阅:https://stackify.com/premature-optimization-evil/

如果你真的需要加快速度,你应该考虑一些线程化的方法,因为它是I/O绑定的。

一种简单的方法是,要使用ThreadPoolExecutor,请参阅:https://docs.python.org/3/library/concurrent.futures.html#threadpoolexecutor

另一种方法(如果你在linux上(就是执行一些shell命令,比如"find"、"grep"等等——这些小C程序经过了高度优化,肯定是最快的解决方案。您可以使用Python来包装这些命令。

Regexp并没有更快,正如@Abdul-Rahman-Ari错误地指出的那样:

$ python -m timeit '"aaaa" in "bbbaaaaaabbb"'
10000000 loops, best of 3: 0.0767 usec per loop
$ python -m timeit -s 'import re; pattern = re.compile("aaaa")' 'pattern.search("bbbaaaaaabbb")'
1000000 loops, best of 3: 0.356 usec per loop

在文本中搜索模式的最佳方法是使用正则表达式:

import re
f = open('folder.txt')
list_of_wanted_word=list()
for line in f:
wanted_word=re.findall('(^[a-z]+)',l)  #find a text in a line and extract it
for k in wanted_word:#putting the word in a list
list_of_wanted_word.append(k)
print(list_of_wanted_word)

最新更新