Python でファイルを解凍する
-
Python の
extractall()メソッドを使って作業ディレクトリにファイルを解凍する -
Python で
extractall()メソッドを用いてファイルを別のディレクトリに解凍する -
条件に基づく
extractall()メソッドを用いた Python でのファイルの解凍 -
unpack_archive()メソッドを用いて Python でファイルを解凍する
ZIP ファイルはアーカイブファイル形式であり、ロスレスなデータ圧縮に役立ちます。1つの ZIP ファイルには複数の圧縮ファイルを含めることができます。ZIP ファイルでは、複数のファイルは単一のファイルよりも高速に転送され、データのサイズを小さくすることができます。Python に組み込まれた ZipFile モジュールは Zip ファイルを解凍するために使用することができます。
この記事では Python で圧縮ファイルや Zip ファイルを抽出する方法について説明します。
Python の extractall() メソッドを使って作業ディレクトリにファイルを解凍する
まず、以下のコマンドを使って Python の組み込みの zipfile モジュールをインポートしてみよう。
from zipfile import ZipFile
完全なサンプルコードは以下の通りです。
from zipfile import ZipFile
test_file_name = "my_files.zip"
with ZipFile(test_file_name, "r") as zip:
zip.printdir()
zip.extractall()
ZipFile 関数の r はファイルの読み込み操作を表し、extractall() 関数は zip ファイルの内容をカレントの作業ディレクトリに展開します。
出力:
File Name Modified Size
file1.txt 2020-11-09 23:03:06 0
file2.txt 2020-11-09 23:03:18 0
Python で extractall() メソッドを用いてファイルを別のディレクトリに解凍する
このメソッドは zip ファイルを別のディレクトリに抽出します。主な違いは、extractall() メソッドの引数に保存先のディレクトリを渡すことです。
完全なサンプルコードは以下の通りです。
from zipfile import ZipFile
with ZipFile("my_files.zip", "r") as zip:
zip.extractall("temp")
print("File is unzipped in temp folder")
現在の作業ディレクトリに新しいディレクトリ temp が作成され、すべての zip ファイルがそこに抽出されます。
出力:
Files are unzipped in temp folder
条件に基づく extractall() メソッドを用いた Python でのファイルの解凍
この方法は、zip ファイル内に大量のファイルがあり、特定の拡張子を持つファイルを抽出する必要がある場合に便利です。例えば、.txt ファイルを zip ファイルから抽出します。
完全なサンプルコードは以下の通りです。
from zipfile import ZipFile
with ZipFile("my_files.zip", "r") as obj_zip:
FileNames = obj_zip.namelist()
for fileName in FileNames:
if fileName.endswith(".txt"):
zipObj.extract(fileName, "temp_txt")
namelist() 関数は、zip ファイルに含まれるすべてのファイルの名前を返します。
endswith() メソッドは、ファイル名の末尾が .txt で終わるかどうかをチェックします。もしそうであれば、extract() 関数は .txt ファイルをカレントディレクトリの temp_txt フォルダに展開します。
unpack_archive() メソッドを用いて Python でファイルを解凍する
このメソッドは Python に組み込まれた shutil モジュールを利用します。これはアーカイブされたファイルのすべての形式を抽出します。
完全なサンプルコードは以下の通りです。
import shutil
shutil.unpack_archive("test.zip")
抽出されたファイルは、このスクリプトを実行している現在の作業ディレクトリにあります。