使用Python从只有basename的tarfile中提取文件

2024-09-30 16:29:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个'tafile',它包含完整路径'/home/usr/path/to/file'的文件。当我把文件解压到当前文件夹时,它递归地创建完整的路径。 有没有一种方法可以只提取基名称的文件。在


Tags: 文件topath方法路径文件夹名称home
3条回答

您可以使用函数extractall来满足您的需要。根据the documentation将存档中的所有成员提取到当前工作目录或目录路径。

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

使用^{}并将其写入您选择的文件中。在

您可以通过破解从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目录中。你可以:

^{pr2}$

注意目录前缀后面的/。我们不想将misc目录添加到“local/bin”,而只想添加它的成员。在

相关问题 更多 >