Python: 在解压tar文件时重命名成员

5 投票
1 回答
3735 浏览
提问于 2025-04-17 05:45

前提

  • 我有一个文件夹 /foo/bar
  • 我有一个压缩文件,里面包含一个文件夹 baz

问题

我想把压缩文件里的 baz 文件夹的内容提取到 /foo/bar 这个文件夹里。

示例

这个压缩文件里包含:

baz/
 file1.txt

源文件夹里有:

foo/
  bar/
    file2.txt

提取后我希望变成:

foo/
  bar/
    file1.txt
    file2.txt

目前的解决方案

可以先把内容提取到一个临时文件夹,然后再把 baz 文件夹里的内容移动到目标位置,这样可以,因为 baz 文件夹的名字是固定的。

还有其他的想法吗?

1 个回答

3

你可以使用 tarfile 库里的 extract()extractall()extractfile() 方法来提取文件。这样你就可以访问压缩包里非顶层的文件了。

需要注意的是,extractall() 中的 path 不是压缩包内部的路径,而是你想要把文件提取到的路径。所以如果你在这里填上 baz 是没有用的。

你可能需要先调用 getmembers() 方法,然后把列表缩减到你想要的文件,最后再调用上面提到的提取方法之一。

撰写回答