Python:使用tarfile提取时忽略目录

22 投票
5 回答
17887 浏览
提问于 2025-04-17 07:50

如果我有一个 .tar 文件,里面有一个文件 '/path/to/file.txt',有没有办法(用 Python)把这个文件提取到指定的目录,而不需要重新创建 '/path/to' 这个目录呢?

5 个回答

2

根据tarfile模块,你可以很简单地做到这一点。 我还没有去查看具体的内容。

TarFile.extract(member, path="")

文档说明:

你可以从压缩包中提取一个文件到当前的工作目录,使用它的完整名称。提取出来的文件信息会尽可能准确。这个文件可以是文件名,也可以是一个TarInfo对象。你还可以通过path指定一个不同的目录。

所以你应该可以这样做:

TarFile.extract(member, path=".")

查看完整的文档请访问: http://docs.python.org/library/tarfile.html

16

TarInfo对象的数据属性是可以修改的。所以你只需要把name改成你想要的名字,然后再提取它就可以了:

import sys, os, tarfile

args = sys.argv[1:]
tar = tarfile.open(args[0])
member = tar.getmember(args[1])
member.name = os.path.basename(member.name)
path = args[2] if len(args) > 2 else ''
tar.extract(member, path)
30

我也遇到过这个问题,下面是根据ekhumoro的回答整理的完整示例。

import os, tarfile
output_dir = "."
tar = tarfile.open(tar_file)
for member in tar.getmembers():
  if member.isreg():  # skip if the TarInfo is not files
    member.name = os.path.basename(member.name) # remove the path by reset it
    tar.extract(member,output_dir) # extract 

撰写回答