web-dev-qa-db-ja.com

Python 2.7でZipファイルの内容を特定のディレクトリに抽出する

これは、スクリプトと同じ現在の作業ディレクトリにある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()
52
lodkkx

ここで混乱が生じたと思います。次のようなものになるはずです。

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
105
secretmike

このスレッドで他の回答を試しましたが、最終的な解決策は次のとおりです。

zfile = zipfile.ZipFile('filename.Zip')
zfile.extractall(optional_target_folder)

extractall を見てください。ただし、信頼できるZipファイルでのみ使用してください。

11
fiatjaf

上記のsecretmikeの答えに追加して、python 2.6をサポートしてすべてのファイルを抽出します。

import zipfile
import contextlib


with contextlib.closing(zipfile.ZipFile('test.Zip', "r")) as z:
   z.extractall("C:\\")
4
Slakker

Python(使用可能なunzipコマンドがないため)を使用してコマンドラインからZipファイルを抽出するだけの場合、zipfileモジュールを直接呼び出すことができます。

python -m zipfile -e monty.Zip target-dir/

docs をご覧ください。また、圧縮とコンテンツの一覧表示もサポートしています。

3
Peter Gibson

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()
2
razzmataz

コードを修正して、ユーザーに尋ねる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()
0
sarfarazit08