2012-02-24 13 views
47

これは、スクリプトと同じ現在の作業ディレクトリにあるzipファイルを解凍するために現在使用しているコードです。どのように抽出する別のディレクトリを指定できますか?Python 2.7の特定のディレクトリへの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() 
+1

書き込み呼び出しの代わりに 'C:\\' +をオープンコールに移動する必要がありますか? –

答えて

96

私はちょうどここに重複が整理を持っていると思います。おそらく次のようなものでなければなりません:

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:\\") 
+0

ZipFileには属性 '__exit__'がありませんので、あなたのwith文がそのままどのように動作するのかわかりません。 – adam

+0

'ZipFile'インスタンスを作成した場合、' __exit__'メソッドがあります。私はちょうどもう一つのtry(python 2.7)の例を与え、それは書かれたように動作します。 – secretmike

+0

Python 2.6は何らかの理由でZipFileの実装が異なります。 – adam

2

Peter de Rivazが上記のコメントに1点を挙げています。あなたは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() 
10

私はこのスレッドで他の回答を試してみましたが、私のための最終的な解決策は単純でした:

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

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

私は、ユーザー 入力 ファイル名とそのパス、それを抽出する必要があり、その抽出されたフォルダを置く場所の詳細制御will'veユーザーとどのような名前を聞いて、コードを変更した
+2

[ZipFile.close](https://docs.python.org/2/library/zipfile.html#zipfile)にあるように、 'zfile.close()'も呼び出すことをお勧めします。 .ZipFile.close)**あなたのプログラムを終了する前にclose()を呼び出さなければなりません。または必須のレコードは書き込まれません。 – erwaman

0

抽出されたフォルダに割り当てる必要があります。

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() 
4

上記のsecretmikeさんの回答に、すべてのファイルを抽出するためのPython 2.6のサポートを追加しました。

import zipfile 
import contextlib 


with contextlib.closing(zipfile.ZipFile('test.zip', "r")) as z: 
    z.extractall("C:\\") 
3

あなただけ(あなたが利用できるのunzipコマンドを持っていないので、例えば)はPythonを使用して、コマンドラインからzipファイルを解凍したい場合は、直接

python -m zipfile -e monty.zip target-dir/ 
zipファイルモジュールを呼び出すことができます

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

関連する問題