Как перейти на один уровень назад во время распаковки tar-файла в python

Я пытаюсь извлечь tar.gz используя import tarfile на самом деле проблема в folder1.tar.gz есть один каталог и некоторые файлы, такие как folder1.tar.gz->folder2->abc.txt,def.txt,folder3

import tarfile
tar=tarfile.open('folder1.tar.gz')
tar.extractall(targetdirectory)

он извлекает abc.txt, def.txt, folder3 в folder2 в моем targettdirectory, но я хочу, чтобы abc.txt, def.txt, folder3 в моем targettdirectory не хотел папку 2, я хочу исключить folder2.

1 ответ

Решение

Если вы знаете структуру архива, вы можете использовать TarFile.getmembers() вместе с TarFile.extractfile(), чтобы получить то, что вы хотите. Вы можете сделать что-то вроде этого

import tarfile
tar=tarfile.open('folder1.tar.gz')
for member in tar.getmembers():
  if member.name.startswith('folder2/') and member.isfile():
    inputfile = tar.extractfile(member)
    with open(os.path.join(targetdirectory, member.name.replace('folder2/', '')), 'wb') as outputfile:
      outputfile.write(inputfile.read())
    inputfile.close()
Другие вопросы по тегам