使用python和gzip进行缓慢解析

使用python和gzip进行缓慢解析,python,gzip,Python,Gzip,我想通读一个大的压缩文本文件,直到我到达一个以某个字符串开头的行,跳到该字符串开始的下一个位置,然后跳回到原始位置。我有可以工作的代码,但是当它到达文件的末尾时,它会变得越来越慢(每个都超过1秒)。有人知道这是为什么,或者有什么补救办法吗 这是基本形式: import re import gzip fi = gzip.open(...) s = re.compile(...) for line in fi: if s.match(line): start = fi.tell()

我想通读一个大的压缩文本文件,直到我到达一个以某个字符串开头的行,跳到该字符串开始的下一个位置,然后跳回到原始位置。我有可以工作的代码,但是当它到达文件的末尾时,它会变得越来越慢(每个都超过1秒)。有人知道这是为什么,或者有什么补救办法吗

这是基本形式:

import re
import gzip
fi = gzip.open(...)
s = re.compile(...)
for line in fi:
  if s.match(line):
    start = fi.tell()
    line = fi.readline()
    while not (s.match(line) or line == ""):
      line = fi.readline()
    ...actions...
    end = fi.tell()
    fi.seek(start-end,1)
    fi.readline()
更新:
现在我正在使用的解决方法是在磁盘上创建一个临时解压缩文件并从中读取,但这需要时间来解压缩和复制。

该文件有多大?您的“大压缩文本文件”有多大?太大而无法同时在内存中保存(未压缩)?我怀疑您遇到的问题是因为
gzip
模块的file对象没有将未压缩的文件保存在内存中,因此查找需要将整个文件重新解压缩到该点。-我仔细检查了源代码——为了确认在搜索时它是这样工作的——它会倒带文件,然后读取1024字节块,直到在向后搜索时它与文件位置匹配。该文件已解压约1GB,因此我应该能够解压整个文件,但将来可能需要打开更大的文件@GaryWalker,这是有道理的,有什么解决办法吗?“现在我使用的解决办法是在磁盘上创建一个临时解压文件并从那里读取,但解压和复制需要时间。”许多算法以空间换取速度或以速度换取空间;这就是规则。