使用Python仅使用basename从tarfile中提取文件

时间:2011-05-27 08:04:10

标签: python tarfile

我有一个'tafile',其中包含完整路径'/ home / usr / path / to / file'的文件。当我将文件解压缩到curent文件夹时,它会递归地创建完整的路径。 有没有办法可以只用基本名称提取文件。

3 个答案:

答案 0 :(得分:2)

使用TarFile.extractfile()并将其写入您选择的文件中。

答案 1 :(得分:2)

您可以通过黑客攻击从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)

假设tarTarFile实例,表示存档,其中某些成员位于utilities/misc目录中,您希望将这些成员折叠到local/bin目录中。你可以这样做:

extractTo(tar, 'local/bin', 'utilities/misc/')

请注意目录前缀上的尾随/。我们不想将misc目录添加到`local / bin',而只是添加其成员。

答案 2 :(得分:-1)

您可以使用extractall功能来满足您的需求。根据{{​​3}}: 将存档中的所有成员解压缩到当前工作目录或目录路径。

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