我有一个“tafile”,其中包含具有完整路径“/home/usr/path/to/file”的文件。当我将文件提取到当前文件夹时,它会递归创建完整路径。有没有办法可以只提取基本名称的文件。
问问题
3950 次
3 回答
4
您可以arcnames
通过破解TarInfo
您从中获得的对象来更改Tarfile.getmembers()
. 然后,您可以使用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',而只是添加它的成员。
于 2013-03-02T05:59:15.457 回答
3
使用TarFile.extractfile()
并将其写入您选择的文件中。
于 2011-05-27T08:07:43.227 回答
0
您可以使用该功能extractall
来满足您的需求。根据文档:
将存档中的所有成员提取到当前工作目录或目录路径。
TarFile.extractall(path="my/path")
于 2011-05-27T08:09:27.433 回答