什么是"最好的";使用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)