Подтвердить что ты не робот

Как распаковать файл в Python на всех ОС?

Есть ли простая функция Python, которая позволила бы распаковать ZIP файл следующим образом:

unzip(ZipSource, DestinationDirectory)

Мне нужно, чтобы решение было одинаковым для Windows, Mac и Linux: всегда создавайте файл, если zip - это файл, каталог, если zip - это каталог, и каталог, если zip - это несколько файлов; всегда внутри, а не в данном целевом каталоге

Как распаковать файл в Python?

4b9b3361

Ответ 1

Используйте zipfile модуль в стандартной библиотеке:

import zipfile,os.path
def unzip(source_filename, dest_dir):
    with zipfile.ZipFile(source_filename) as zf:
        for member in zf.infolist():
            # Path traversal defense copied from
            # http://hg.python.org/cpython/file/tip/Lib/http/server.py#l789
            words = member.filename.split('/')
            path = dest_dir
            for word in words[:-1]:
                while True:
                    drive, word = os.path.splitdrive(word)
                    head, word = os.path.split(word)
                    if not drive:
                        break
                if word in (os.curdir, os.pardir, ''):
                    continue
                path = os.path.join(path, word)
            zf.extract(member, path)

Обратите внимание, что использование extractall было бы намного короче, но этот метод защищает не от обход пути перед Python 2.7.4. Если вы можете гарантировать, что ваш код работает с последними версиями Python.

Ответ 2

Python 3.x использует -e аргумент, а не -h.. например:

python -m zipfile -e compressedfile.zip c:\output_folder

следующие аргументы.

zipfile.py -l zipfile.zip        # Show listing of a zipfile
zipfile.py -t zipfile.zip        # Test if a zipfile is valid
zipfile.py -e zipfile.zip target # Extract zipfile into target dir
zipfile.py -c zipfile.zip src ... # Create zipfile from sources