@albertalexandrov

Рекурсивно распаковать архив и вернуть список путей?

Имеется следующая структура zip-архива (может быть произвольной):

archive.zip
  inner.zip
    file1.txt
    file2.txt
  file3.txt


Для распаковки был написан скрипт:

import os
import zipfile
from pathlib import Path


def unpack(file_path):
    if zipfile.is_zipfile(file_path):
        zf = zipfile.ZipFile(file_path)
        zf.extractall(file_path.parent)
        os.remove(file_path)

        paths = []

        for f in file_path.parent.iterdir():
            paths.extend(unpack(f))

        return paths

    return [file_path.absolute().as_posix()]


print(unpack(Path('archive.zip')))


Распаковывает скрипт верно. Однако, неверно составляется список путей до распакованных файлов. Приведенный выше скрипт возвращает следующий список путей:

['/absolute/path/file3.txt', '/absolute/path/file3.txt', '/absolute/path/file2.txt', '/absolute/path/file1.txt']


Можно видеть, что есть совпадающие пути. Можно конечно в удалить дубликаты или распаковать. Но видимо ошибка в рекурсии.

Как устранить это дублирование?
  • Вопрос задан
  • 246 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы