使用Python从tar文件中提取仅包含基本文件名的文件

2 投票
3 回答
5052 浏览
提问于 2025-04-16 18:27

我有一个叫'tafile'的文件,它里面记录了文件的完整路径,比如'/home/usr/path/to/file'。当我把这个文件提取到当前文件夹时,它会把完整的路径都创建出来,层层递归地放在文件夹里。请问有没有办法只提取文件的基本名称,而不带上那些完整的路径呢?

3 个回答

0

你可以使用extractall这个函数来满足你的需求。根据文档的说明:这个函数可以把压缩包里的所有文件提取到当前工作目录或者指定的目录中。

TarFile.extractall(path="my/path")
4

你可以通过修改从 Tarfile.getmembers() 获取的 TarInfo 对象来更改 arcnames。然后,你可以使用 Tarfile.extractall 将这些成员以新名字写入你选择的目标位置。

比如,下面这个函数会从压缩包的任意子目录中选择成员,并将它们提取到目标位置,使用它们的基本名字:

def extractTo(tar, dest, selector):
    if type(selector) is str:
        prefix = selector
        selector = lambda m: m.name.startswith(prefix)
    members = [m for m in tar.getmembers() if selector(m)]
    for m in members:
        m.name = os.path.basename(m.name)
    tar.extractall(path = dest, members = members)

假设 tar 是一个 TarFile 实例,代表一个包含一些位于 utilities/misc 目录中的成员的压缩包,而你想把这些成员放到 local/bin 目录下。你可以这样做:

extractTo(tar, 'local/bin', 'utilities/misc/')

注意目录前缀后面的 /。我们不想把 misc 目录也放到 `local/bin` 中,而只是想放里面的成员。

4

使用 TarFile.extractfile() 方法,然后把提取出来的内容写入你想要的文件中。

撰写回答