【问题标题】:Read line by line gzip big file逐行读取gzip大文件
【发布时间】:2014-04-27 16:53:25
【问题描述】:

我需要知道一个数字在 2912232966 行的 gzip 文件中出现了多少次,我有以下信息:

import gzip
from itertools import islice

count=0
f = gzip.open(file,'rb') 
for line in f:
lin = line.decode('utf-8')
number = lin[:lin.index('\t')]
if number == '2719708':
  conunt+=1

但我明白了: 'CRC 校验失败 0xabc8df68 != 0xba1760acL'

它只有效 最多只能工作 400000000 行,请帮助

【问题讨论】:

  • 你能用gunzip解压文件没有错误吗?
  • 也许您可以将 gunzip 作为子进程运行并读取其输出。

标签: python


【解决方案1】:

链接到zlib

引用 jiffyclubs 回答 here

gzip 模块的问题不在于它不能解压 部分文件,错误仅在尝试验证时发生 解压缩内容的校验和。 (原来的校验和是 存储在压缩文件的末尾,因此验证将 永远不要使用部分文件。)

关键是要欺骗 gzip 跳过验证。答案由 caesar0301 通过修改 gzip 源代码来做到这一点,但它不是 有必要走那么远,简单的猴子补丁就可以了。我写了这个 上下文管理器临时替换 gzip.GzipFile._read_eof 而我 解压部分文件:

这看起来正是你所需要的......

转到该链接并阅读整个回复。


通过在 Google 上搜索指向“python gzip crc check failed”的 stackexchange 链接找到 第一个结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 2011-09-19
    相关资源
    最近更新 更多