在没有命中内存的情况下快速查找zipfile中的行

时间:2017-04-25 09:56:16

标签: python

在包含.txt的zipFile中搜索行的最快方法是什么?

zipfile的大小约为100mb,提取后的大小约为700mb,因此我无法在内存中提取和读取文本文件。

我是否有可能在内存中读取zip文件(100 mb)并进行搜索?

目前我这样做。

with ZipFile(zip_file) as myzip:
    with myzip.open(myzip.namelist()[0]) as myfile:
        for line in myfile:
            if line.startswith("interesting words"):
                print(line)

需要大约15秒。

1 个答案:

答案 0 :(得分:1)

您拥有的ZipFile代码在阅读和解压缩数据方面很懒散。它一次读取4 Kb的压缩数据,将其解压缩到内存中,然后在迭代文件对象时扫描它以获取换行符。

如果您想一次阅读文件的全文,请使用以下内容:

with ZipFile(zip_file) as myzip:
    with myzip.open(myzip.namelist()[0]) as myfile:
        text = myfile.read() # reads the whole file into a single string
    for line in text.splitlines(): # you might be able to use regex on text instead of a loop
        if line.startswith("interesting words"):
            print(line)

我不知道这是否会比你当前的代码更快。如果不是,您可能需要对代码进行分析,以确保减压是减慢速度的部分(而不是其他东西)。正如我在代码中所评论的那样,您可能会发现在text字符串上使用正则表达式搜索比将其拆分为行并迭代搜索每个字符串更好。