In this article we will discuss different ways to unzip or extract single, multiple or all files from zip archive to current or different directory.
Python の zipfile モジュールでは、ZipFile クラスは ZIP アーカイブからすべてのコンテンツを抽出するメンバ関数を提供しています。
Module required :
from zipfile import ZipFile
これを使用してzipファイルからすべての内容を抽出します
Extract all files from a zip file to current directory
Sample.zip ファイルがあったとします’sample’zip.set.zip.zip.zip.zip’ がカレントディレクトリにあるとします。
これを解凍するには、まず zip ファイルを読み込みモードで開いて ZipFile オブジェクトを作り、そのオブジェクトに対して extractall() を呼びます。
ZIP ファイルから別のディレクトリにすべてのファイルを取り出す
ZIP ファイルから別のディレクトリにすべてのファイルを取り出すには、extractall() の引数に取り出し先のディレクトリを渡せばよい。
# Create a ZipFile Object and load sample.zip in itwith ZipFile('sampleDir.zip', 'r') as zipObj: # Extract all the contents of zip file in different directory zipObj.extractall('temp')
これは temp フォルダにある ‘sample.zip’ のすべてのファイルを取り出します。
条件に基づいて大きな zip ファイルからいくつかのファイルを取り出す
非常に大きな zip ファイルがあって、アーカイブ内の数千のファイルからいくつかのファイルを必要とすると仮定します。 大きな zip ファイルからすべてのファイルを解凍するには、数分かかることがあります。
Python の zipfile モジュールでは、ZipFile クラスは ZIP ファイルから 1 つのファイルを抽出するメンバ関数を提供しています。 これは ZipFile.namelist()
例えば、zipファイルからcsvファイルだけを取り出すのに使ってみましょう。
# Create a ZipFile Object and load sample.zip in itwith ZipFile('sampleDir.zip', 'r') as zipObj: # Get a list of all archived file names from the zip listOfFileNames = zipObj.namelist() # Iterate over the file names for fileName in listOfFileNames: # Check filename endswith csv if fileName.endswith('.csv'): # Extract a single file from zip zipObj.extract(fileName, 'temp_csv')
これは与えられたzipアーカイブからcsvファイルだけを取り出します。
完全な例は次の通りです。