これは、スクリプトと同じ現在の作業ディレクトリにあるZipファイルを抽出するために現在使用しているコードです。抽出する別のディレクトリを指定するにはどうすればよいですか?
私が試したコードは、必要な場所にそれを抽出していません。
import zipfile
fh = open('test.Zip', 'rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
outfile = open(name, 'wb')
outfile.write('C:\\'+z.read(name))
outfile.close()
fh.close()
ここで混乱が生じたと思います。次のようなものになるはずです。
import zipfile
fh = open('test.Zip', 'rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
outpath = "C:\\"
z.extract(name, outpath)
fh.close()
すべてのファイルを抽出したい場合:
import zipfile
with zipfile.ZipFile('test.Zip', "r") as z:
z.extractall("C:\\")
Pythonの最新バージョンにはpip install zipfile36を使用します
import zipfile36
このスレッドで他の回答を試しましたが、最終的な解決策は次のとおりです。
zfile = zipfile.ZipFile('filename.Zip')
zfile.extractall(optional_target_folder)
extractall を見てください。ただし、信頼できるZipファイルでのみ使用してください。
上記のsecretmikeの答えに追加して、python 2.6をサポートしてすべてのファイルを抽出します。
import zipfile
import contextlib
with contextlib.closing(zipfile.ZipFile('test.Zip', "r")) as z:
z.extractall("C:\\")
Python(使用可能なunzipコマンドがないため)を使用してコマンドラインからZipファイルを抽出するだけの場合、zipfileモジュールを直接呼び出すことができます。
python -m zipfile -e monty.Zip target-dir/
docs をご覧ください。また、圧縮とコンテンツの一覧表示もサポートしています。
Peter de Rivazは、上記のコメントにポイントを持っています。ディレクトリをopen()の呼び出しに含める必要があります。このようなことをしたいと思うでしょう:
import zipfile
import os
os.mkdir('outdir')
fh = open('test.Zip','rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
outfile = open('outdir'+'/'+name, 'wb')
outfile.write()
outfile.close()
fh.close()
コードを修正して、ユーザーに尋ねるinputファイル名と、それを抽出する必要がある場所などユーザーは、抽出されたフォルダーを配置する場所と、抽出されたフォルダーに割り当てる名前をより細かく制御できます。
import zipfile
#picking Zip file from the directory
ZipFileName = raw_input("Enter full path to Zip file:")
fh = open( ZipFileName , 'rb')
z = zipfile.ZipFile(fh)
#assigning a name to the extracted Zip folder
DestZipFolderName = raw_input("Assign destination folder a name: ")
DestPathName = raw_input("Enter destination directory: ")
DestPath = DestPathName + "\\" + DestZipFolderName
for name in z.namelist():
outpath = DestPath
z.extract(name, outpath)
fh.close()