跳过损坏的存档(。焦油.gz)使用“tarfile”时

2024-09-24 22:21:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有100+的数字。焦油.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

Tags: 文件inimportidforosaswith
1条回答
网友
1楼 · 发布于 2024-09-24 22:21:52

如果我对你的问题理解正确,你可能需要这样的修改:

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

不确定您的文件是如何损坏的,以及您会看到什么类型的错误,因此您可能需要捕获不同的异常。你知道吗

相关问题 更多 >