处理python中损坏的档案

问题描述 投票:0回答:1

我有一个文件压缩/解压缩系统,我首先检查文件是否被压缩,如果没有,那么我将此文件压缩到tar存档(tar.gz)。然后将压缩的存档上载到服务器。上传后,服务器解压缩文件,并对该文件进行一些处理。

如果压缩服务在压缩文件期间关闭,则会出现问题。结果,tar存档被破坏了。

....
tar = tarfile.open(compress_file_name, "w:gz")
tar.add(file_path, arcname=file_name)
tar.close()
....

并尝试验证文件的完整性

try:
    f = tarfile.open(file_path) # This should throw CRC error but its not
except Exception, e:
    raise e

但事实上python似乎打开文件就好了。为了验证文件是否真的好,我试着打开文件tar -xvzf <corrupted_archive>,我得到了

[~/]$ tar -xvzf <corrupted_archive>

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

现在我可以使用subprocess.call(['tar','-xvzf',archive_name])在python中使用相同的过程,但实际上我用什么pythonic方法来验证文件的完整性。

任何帮助将受到高度赞赏。

python tar
1个回答
4
投票

除非标题已损坏,否则打开文件不会产生任何错误。您需要读取整个文件以显示错误。无论这是tar.gz,来自GZIP(.gz)部分的CRC将足以(希望)揭示错误:

import gzip

with gzip.open(file_path) as g:
    try:
        while g.read(1024 * 1024):
            pass
    except IOError as e:
        print("Corrupted!", e)
© www.soinside.com 2019 - 2024. All rights reserved.