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

Имеется следующая структура 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']

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

Как устранить это дублирование?


Ответы (0 шт):