簡體   English   中英

如何在 Python 中搜索字符串是否位於非常大的文件中

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM