26

このように .zip ファイルを解凍できる単純な Python 関数はありますか?:

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 では、次のように -h.. ではなく -e 引数を使用します。

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 に答える