Pythonでのファイルの解凍


435

zipfileドキュメントを読みましたが、ファイルを解凍する方法がわかりませんでした。ファイルを圧縮する方法しか理解できませんでした。zipファイルのすべてのコンテンツを同じディレクトリに解凍するにはどうすればよいですか?


回答:


787
import zipfile
with zipfile.ZipFile(path_to_zip_file, 'r') as zip_ref:
    zip_ref.extractall(directory_to_extract_to)

それだけです!


7
すべての.zipアーカイブで.zipアーカイブの内容が同じ場合はどうなりますか?抽出する前にコンテンツの名前を変更する方法は?例:1.zip 2.zip ..すべてがcontent.txtを含む:1content.txt 2content.txtのようにすべて抽出しますか?
iratzhash 2016

8
@iratzhash通常、tempfileを使用してコンテンツの新しい一時ディレクトリを作成します。docs.python.org /3/ library / tempfile.html 一時ディレクトリに解凍し、そこからファイルを移動/整理します。
Dave Forgac、2017

8
@ 3kstcしfrom zipfile import ZipFileます。使用すると、を使用する必要がなくなり、を使用zipfile.ZipFileできますZipFile(zip_file_name)
Debug255 2018

@iratzhash 1.5年前にコメントしました。しかし、他の人が知っているように、通常、zipファイル内のコンテンツは読み取り専用です。良い答えは「bouke」によってここにあります
Debug255 2018

メタノートのようなものですが、2018年11月の編集により、これは、コンテキストマネージャー(およびその意味へのリンク)を既に使用している別の回答とほぼ同じになります。
Engineero

304

Python 3.2以降を使用している場合:

import zipfile
with zipfile.ZipFile("file.zip","r") as zip_ref:
    zip_ref.extractall("targetdir")

コンテキストマネージャーの構築を使用するため、これ を使用して閉じるまたはtry / catchを使用する必要はありません。


18
ZipFileは2.7以降のコンテキストマネージャーとしても機能します:docs.python.org/2/library/zipfile.html#zipfile.ZipFile
FelixEnescu

docs.python.org/3.6/library/zipfile.html#zipfile.BadZipFile例外に対処する方法 一般的に、try / exceptをコンテキストマネージャー(with-statement)で使用するためのベストプラクティスは何ですか?
SnowOnion

1
zipfile+ pathlib=勝つ。私があなたの答えを少し更新してもよろしいですか?
Datanovice

38

extractallPython 2.6以降を使用している場合は、メソッドを使用します

zip = ZipFile('file.zip')
zip.extractall()

宛先(zip.extractall(destination))を指定する必要はありませんか?
asonnenschein 2013年


10
@DanGayleこれは、zipファイルの場所ではなく、現在の作業ディレクトリにzipファイルを抽出しているようです
Brian Leishman

4
私にとって、ZipFile()は機能しませんでしたが、zipfile.ZipFile()は機能しました-zipfileをインポートした後
Agile Bean

6

インポートすることもできますZipFile

from zipfile import ZipFile
zf = ZipFile('path_to_file/file.zip', 'r')
zf.extractall('path_to_extract_folder')
zf.close()

作品のPython 2Pythonの3


1
ご清聴ありがとうございました@MylesHollowedただし、これは承認された回答のコピーではありません。私はそれらが互いに類似していることに同意しますが、それらは異なります。これはあなたのコメントにも示されています。受け入れられたものは私のものよりもあなたにとって間違いなく優れているからです。それがコピーである場合、それは同じです...誰かにとっては、おそらくより読みやすく、インポートするコードが少ないことに気付いたので、私の答えは価値があるかもしれません...私が私の答えを置くことに決めたのは、これらの違いのためです代わりを与えるために。それを受け入れた後で他の答えを出すことができるのはそのためではありませんか?最高です
simhumileco 2018年

この答えの何が問題になっていますか?なぜ誰かが彼女に否定的なポイントを与えたのですか?結局のところ、それは質問への回答であり、他の回答と比較してその単純さによって区別されます。これは、回答を探している一部の人々にとって重要かもしれません。だよね?
simhumileco

1
@MylesHollowed は3.6.5でimport zipfile.ZipFile生成さModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a packageれます。私はそれが私の側のオペレーターのエラーであることにオープンですが、それが何であるかわかりません。
MikeF

6

これを試して :


import zipfile
def un_zipFiles(path):
    files=os.listdir(path)
    for file in files:
        if file.endswith('.zip'):
            filePath=path+'/'+file
            zip_file = zipfile.ZipFile(filePath)
            for names in zip_file.namelist():
                zip_file.extract(names,path)
            zip_file.close() 

path:ファイルのパスを解凍します


3
import os 
zip_file_path = "C:\AA\BB"
file_list = os.listdir(path)
abs_path = []
for a in file_list:
    x = zip_file_path+'\\'+a
    print x
    abs_path.append(x)
for f in abs_path:
    zip=zipfile.ZipFile(f)
    zip.extractall(zip_file_path)

zipでない場合、ファイルの検証は含まれません。フォルダーに.zipファイル以外が含まれていると、失敗します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.