Python检查gzip归档文件的完整性。

3

在Python中,是否有使用gzip或其他模块来检查gzip归档文件完整性的方法?

基本上,是否有Python等效于以下内容的方法:

gunzip -t my_archive.gz
2个回答

4

抱歉,第一个回答(现已删除)是由于错误阅读问题导致的。

我建议使用gzip模块读取文件,只需丢弃读取的内容即可。无论如何,您都必须解码整个文件才能检查其完整性。https://docs.python.org/2/library/gzip.html

类似以下代码(未经测试的代码)

import gzip
chunksize=10000000 # 10 Mbytes

ok = True
with gzip.open('file.txt.gz', 'rb') as f:
    try:
        while f.read(chunksize) != b'':
            pass
    except:
        ok = False

我不知道读取损坏的zip文件会抛出什么异常,你可能需要找出并只捕获这个特定的异常。


在尋找了一番後,我得出了這是在Python中檢查存檔的唯一合理方法的結論,因此儘管一般來說這會消耗一些CPU,但我還是會接受您的答案... - wwn
错误是 except zlib.error:,你也可以将 try 行缩短为 while f.read(chunksize):,不需要 != '' - SurpriseDog
1
最好假设 ok = False,只有在成功时才返回 True。目前,其他异常会让用户认为 gz 文件没问题,即使它实际上有问题。 - erip

1
你可以使用subprocess或os模块来执行此命令并读取输出。类似于这样:
使用os模块
import os 
output = os.popen('gunzip -t my_archive.gz').read()

使用子进程模块
import subprocess
proc = subprocess.Popen(["gunzip", "-t", "my_archive.gz"], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()

重点是我不想使用外部命令。我希望在纯Python中实现这一点。 - wwn
1
你在问题中没有明确“the point”。答案给出了你所要求的“使用gzip或其他模块在Python中检查gzip归档完整性的方法”。下次如果需要“纯”Python,请更清楚地表达。 - clg4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接