Python: невозможно извлечь только определенные папки из tar - PullRequest
1 голос
/ 25 сентября 2019

Я пытаюсь извлечь интересующие меня папки из большого tar-файла.

import  tarfile
import os

list_dir = []
models = ["usb","test"]
with tarfile.open("build_today.tar.gz") as tar:
for tarinfo in tar.getmembers():
    if tarinfo.name.startswith(os.path.join("build_today","pips")):
        for model in models:
            if tarinfo.name.startswith(os.path.join("build_today","pips",model,"")):
                list_dir.append(tarinfo.name)
    elif tarinfo.name.startswith(os.path.join("build_today","objects")):
        for model in models:
            if tarinfo.name.startswith(os.path.join("build_today","objects",model,"")):
                list_dir.append(tarinfo.name)
    else:
        list_dir.append(tarinfo.name)
print list_dir
tar.extractall(members=list_dir)

Я могу получить print 'list_dir', где я могу увидеть содержимое, которое я ожидаю.Но при извлечении происходит сбой.

Сбой при ошибке:

Traceback (most recent call last):
File "tar.py", line 18, in <module>
tar.extractall(members=list_dir)
File "/grid/common/pkgs/python/v2.7.10/lib/python2.7/tarfile.py", line 2067, in extractall
if tarinfo.isdir():
AttributeError: 'str' object has no attribute 'isdir'

Пожалуйста, помогите!

1 Ответ

1 голос
/ 25 сентября 2019

Из первого анализа кажется, что проблема здесь:

list_dir.append(tarinfo.name)

Здесь вы добавляете имя файла в виде строки.Вместо этого вам нужен «файловый объект» со встроенным методом .isdir()

...