[英]How to search if a string is in a very large file in Python
我有一个 100GB 的文本文件,其中包含 1000 亿位 pi,我需要一种快速的方法来搜索该文件中是否有 21 位数字。 请注意,整个文件是单行,因此没有换行符。 我有这个 function 使用大缓冲区(500mb)来加载文件的一部分并检查数字是否存在:
def fnd(s):
start = 2
with open("pi_dec_1t_01.txt", 'r') as f:
fsize = os.path.getsize("pi_dec_1t_01.txt")
bsize = 536870912
buffer = None
if start > 0:
f.seek(start)
overlap = len(s) - 1
while True:
if (f.tell() >= overlap and f.tell() < fsize):
f.seek(f.tell() - overlap)
buffer = f.read(bsize)
if buffer:
pos = buffer.find(s)
if pos >= 0:
return f.tell() - (len(buffer) - pos)
else:
return -1
如果我只想搜索其中一个数字会很快,但我需要搜索多达 20 亿个(直到找到一个),这实际上需要几个世纪的时间。 任何时间有效的方法来做到这一点? 即使我需要使用其他语言或平台
您可以检查此 package 并可能找到有关它实现的算法的更多信息: https://pyahocorasick.readthedocs.io/en/latest/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.