Извлечение файла из tarfile только с базовым именем с использованием Python - PullRequest
1 голос
/ 27 мая 2011

У меня есть «tafile», который содержит файлы с полным путем «/ home / usr / path / to / file». Когда я извлекаю файл в текущую папку, он рекурсивно создает полный путь. Есть ли способ, которым я могу извлечь файл только с базовым именем.

Ответы [ 3 ]

2 голосов
/ 02 марта 2013

Вы можете изменить 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 ', а просто его члены.

2 голосов
/ 27 мая 2011

Используйте TarFile.extractfile() и запишите его в файл по вашему выбору.

0 голосов
/ 27 мая 2011

Вы можете использовать функцию extractall, чтобы соответствовать вашим потребностям. Согласно документации : Извлечение всех членов из архива в текущий рабочий каталог или путь к каталогу.

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