Имеется следующая структура 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']
Можно видеть, что есть совпадающие пути. Можно конечно в удалить дубликаты или распаковать. Но видимо ошибка в рекурсии.
Как устранить это дублирование?