26

是否有一个简单的 Python 函数可以像这样解压缩 .zip 文件?:

unzip(ZipSource, DestinationDirectory)

我需要在 Windows、Mac 和 Linux 上执行相同操作的解决方案:如果 zip 是文件,则始终生成文件,如果 zip 是目录,则始终生成目录,如果 zip 是多个文件,则生成目录;总是在给定的目标目录中,而不是在给定的目标目录中

如何在 Python 中解压缩文件?

4

2 回答 2

44

使用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 上运行。

于 2012-10-14T21:42:58.527 回答
4

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
于 2014-10-23T14:31:22.623 回答