Как перейти на один уровень назад во время распаковки 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()