繁体   English   中英

python gzip.open:zlib.error:解压缩数据时出现错误-3:长度或距离符号过多

[英]python gzip.open: zlib.error: Error -3 while decompressing data: too many length or distance symbols

我想使用gzip.open在 python 中即时解压缩一个巨大的 gz 文件(wikidata json dump latest-all.json.gz ,104GB 压缩)。

它工作了一段时间。 但是,在读取 3970 万行后,它会产生错误:

zlib.error: Error -3 while decompressing data: too many length or distance symbols

我进行解压和读取的函数如下所示:

import gzip
...
def wikidata(filename):
    with gzip.open(filename, mode='rt') as f:
        f.read(2) # skip first two bytes: "{\n"
        for line in f:
            try:
                yield json.loads(line.rstrip(',\n'))
            except json.decoder.JSONDecodeError:
                continue

完整的错误是:

Traceback (most recent call last):
  File "parse.py", line 95, in <module>
    for line in lines:
  File "parse.py", line 21, in wikidata
    for line in f:
  File "/usr/lib/python3.8/gzip.py", line 305, in read1
    return self._buffer.read1(size)
  File "/usr/lib/python3.8/_compression.py", line 68, in readinto
    data = self.read(len(byte_view))
  File "/usr/lib/python3.8/gzip.py", line 487, in read
    uncompress = self._decompressor.decompress(buf, size)
zlib.error: Error -3 while decompressing data: too many length or distance symbols

这可能是什么原因? 我该如何解决这个问题?

这意味着压缩数据在该点或之前的一小段距离已损坏。 解决问题的唯一方法是用未损坏的 gzip 文件替换输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM