使用Python从tar文件中提取仅包含基本文件名的文件
我有一个叫'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()
方法,然后把提取出来的内容写入你想要的文件中。