[英]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.