そのような.Zipファイルの解凍を可能にする単純なPython関数はありますか?:
unzip(ZipSource, DestinationDirectory)
Windows、Mac、Linuxで同じように動作するソリューションが必要です。Zipがファイルの場合は常にファイルを作成し、Zipがディレクトリの場合はディレクトリを作成し、Zipが複数のファイルの場合はディレクトリを作成します。指定された宛先ディレクトリではなく、常に内部
Pythonでファイルを解凍するにはどうすればよいですか?
標準ライブラリの 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
を使用するとはるかに短くなりますが、そのメソッドは path traversalの脆弱性 に対してnot保護します= before Python 2.7.4。コードが最新バージョンのPythonで実行されることを保証できる場合。
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