使用'tarfile'时跳过损坏的档案(.tar.gz)

时间:2019-01-12 06:17:21

标签: python tar

一个文件夹中有100多个.tar.gz文件。其中一些文件已损坏。

我正在尝试提取所有这些。如果文件损坏,我想跳过该存档,然后移至下一个文件。另外,如果可能的话,最后,我将提供一个提取失败的档案的列表。

import os
import tarfile
files = os.listdir('G:\\A')
for file in files:
    id = file.split('.')
    with tarfile.open('G:\\A\\' + file,'r:gz') as tar:
        tar.extractall(path='G:\\A\\Extracted\\' + id[0])

循环按预期方式进行,但是当遇到损坏的归档文件时,会产生错误:“压缩文件在到达流结束标记之前已结束”

编辑: 根据ILI的评论,我尝试了以下操作,但出现了相同的错误。

BLOCK_SIZE = 1024
for file in files:    
    with tarfile.open('G:\\Sat Img\\' + file) as tardude:
        for member in tardude.getmembers():
            with tardude.extractfile(member.name) as target:
                for chunk in iter(lambda: target.read(BLOCK_SIZE), b''):
                    pass

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,那么您可能正在寻找像这样的修改:

import os
import tarfile
files = os.listdir('G:\\A')
for file in files:
    id = file.split('.')
    try:
        with tarfile.open('G:\\A\\' + file,'r:gz') as tar:
            tar.extractall(path='G:\\A\\Extracted\\' + id[0])
    except tarfile.ReadError:  # reading tarfile failed
        continue               # move on to the next one

不确定您的文件如何损坏以及会看到哪种错误,因此您可能需要捕获其他异常。