gzip 文件意外结束

gzip unexpected end of file

我可以根据 previous answers.

使用 gzip -t file.gzzcat file.gz > /dev/null 检查 gzip 文件的完整性

有时我的作业在大文件压缩完成之前就死掉了。如果我从头到尾检查文件,我将收到有关文件意外结束的错误。但是是否可以只测试压缩文件没有意外结束,所以我不必通读整个文件?

根据下面 Mark Adler 的回答编辑 2018(Python 3.2+ 解决方案):

import os
import string
import gzip

with gzip.open('test.gz', 'wt') as f:
    f.write(string.ascii_lowercase)

with open('test.gz', 'rb') as f:
    f.seek(-4 , os.SEEK_END)
    length = int.from_bytes(f.read(), byteorder='little')
    assert length == 26
    print('Thanks Mark Adler!') 
    print('The English alphabet has {length} letters.'.format(length=length))

不,没有。您需要一直解压缩以查看 deflate 压缩数据是否正确终止,并且它后面是 32 位 CRC 和未压缩数据长度模 232.

如果你恰好知道解压数据的长度,或者知道一些长度限制,那么你可以检查gzip文件的最后四个字节,看看它是否匹配或满足限制。如果不一致,那么您就知道 gzip 文件没有完成。如果一致,那么只能得出大概可以的结论。 (有可能是流碰巧提前终止,最后四个字节意外地满足了约束。)