Python tarfile模块在解压时覆盖现有文件 - 如何禁用?

2 投票
3 回答
1632 浏览
提问于 2025-04-16 05:22

有没有办法让 tarfile.extractallAPI)在提取文件时不覆盖已经存在的文件?我说的“防止”是指最好能在即将覆盖文件时抛出一个异常。现在的情况是,它会默默地覆盖这些文件。

3 个回答

0

我遇到了类似的情况,我只想在所有文件还没有被提取的情况下进行提取。我使用下面这个函数来检查 archive 是否已经被提取到 extract_dir 这个目录里:

from pathlib import Path
import tarfile

def is_extracted(archive, extract_dir):
    tar = tarfile.open(archive)
    filenames = tar.getnames()
    return all([(Path(extract_dir) / f).exists() for f in filenames])
0

你有没有试过把 tarfile.errorlevel 设置为 2?这样的话,非致命的错误就会被抛出来。我猜覆盖文件的情况就属于这种错误。

4

你可以用 tarfile.getnames 这个方法来检查一下结果,看看和现有的文件对比一下,如果有问题就报错。

撰写回答