繁体   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