Извлеките все файлы с путем к каталогу в данном каталоге - PullRequest
7 голосов
/ 24 ноября 2011

У меня есть архив tar, в котором у меня есть каталог, который мне нужно извлечь в данный каталог. Например: у меня есть каталог

TarPrefix / х / у / г

в архиве tar Я хочу извлечь его в заданный целевой каталог, например: extract / a / этот каталог должен содержать все файлы и каталоги, содержащиеся в каталоге TarPrefix / x / y / z.

subdir_and_files = [  tarinfo for tarinfo in tar.getmembers()
                      if tarinfo.name.startswith("subfolder/")
                   ]

чтобы получить список всех членов в пути к каталогу "subfolder /", а затем я извлекаю его, используя tar.extractall(extracted/a,subdir_and_files) но он извлекает всех членов с их путем к каталогу. Например, это приводит к извлечению / a / x / y / z. Не могли бы вы помочь мне в извлечении этих файлов в данной папке.

Ответы [ 2 ]

13 голосов
/ 24 ноября 2011

Похоже, вы, возможно, уже нашли ответ, но в любом случае вот моя версия:

import sys, tarfile

def get_members(tar, prefix):
    if not prefix.endswith('/'):
        prefix += '/'
    offset = len(prefix)
    for tarinfo in tar.getmembers():
        if tarinfo.name.startswith(prefix):
            tarinfo.name = tarinfo.name[offset:]
            yield tarinfo

args = sys.argv[1:]

if len(args) > 1:
    tar = tarfile.open(args[0])
    path = args[2] if len(args) > 2 else '.'
    tar.extractall(path, get_members(tar, args[1]))
2 голосов
/ 01 декабря 2017
with tarfile.open('sourcefile.tgz', 'r:gz') as _tar:
    for member in _tar:
      if member.isdir():
         continue
      fname = member.name.rsplit('/',1)[1]
      _tar.makefile(member, 'desination_dir' + '/' + fname)
...