Python: извлечение с использованием tarfile, но без учета каталогов - PullRequest
11 голосов
/ 06 декабря 2011

Если у меня есть файл .tar с файлом '/path/to/file.txt', есть ли способ (в Python) извлечь файл в указанный каталог без воссоздания каталога '/path/to'?

Ответы [ 4 ]

14 голосов
/ 09 мая 2013

Я тоже столкнулся с этой проблемой и перечислил полный пример на основе ответа Эхуморо

import os, tarfile
output_dir = "."
tar = tarfile.open(tar_file)
for member in tar.getmembers():
  if member.isreg():  # skip if the TarInfo is not files
    member.name = os.path.basename(member.name) # remove the path by reset it
    tar.extract(member,output_dir) # extract 
9 голосов
/ 07 декабря 2011

Атрибуты данных объекта TarInfo доступны для записи. Так что просто измените name на то, что вы хотите, а затем распакуйте его:

import sys, os, tarfile

args = sys.argv[1:]
tar = tarfile.open(args[0])
member = tar.getmember(args[1])
member.name = os.path.basename(member.name)
path = args[2] if len(args) > 2 else ''
tar.extract(member, path)
2 голосов
/ 07 декабря 2011

В соответствии с модулем tarfile, вы можете сделать это легко.Я еще не проверил его.

TarFile.extract(member, path="")

Документация:

Извлеките элемент из архива в текущий рабочий каталог, используя его полное имя.Информация о его файле извлекается максимально точно.Член может быть именем файла или объектом TarInfo.Вы можете указать другой каталог, используя путь.

Так что вы должны быть в состоянии сделать

TarFile.extract(member, path=".")

См. Полную документацию по адресу: http://docs.python.org/library/tarfile.html

0 голосов
/ 07 декабря 2011

Вы можете использовать TarFile.extractfile (member) для извлечения определенного файла.

Возвращает файлоподобный объект (типичный Python), который затем можно использовать для записи содержимого вфайл в любом месте.

...