Pythonでgzipファイルを扱う方法(gzipモジュールの使い方)
GZipアプリケーションは、ファイルの圧縮・解凍に使用されるツールで、GNUプロジェクトの一部です。Pythonのgzipモジュールは、このGZipアプリケーションへのインターフェースを提供しており、gzipのデータ圧縮アルゴリズム自体はzlibモジュールをベースとしています。
gzipモジュールには、GzipFileクラスとそのメソッドが定義されているほか、利便性の高い関数として open()、compress()、decompress() も用意されています。
圧縮と解凍を行う最も簡単な方法は、これらの関数を使用することです。
open()
open() 関数は、gzip圧縮されたファイルをバイナリモードまたはテキストモードで開き、ファイルライクなオブジェクト(物理ファイル、文字列、バイトオブジェクトなど)を返します。デフォルトでは「rb」モード(バイナリデータの読み込み)で開かれますが、modeパラメータには以下のような他のモードも指定できます。
バイナリモード: 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x', 'xb' テキストモード: 'rt', 'at', 'wt', 'xt'
また、この関数では圧縮レベルも指定でき、指定できる値は0〜9の範囲です。テキストモードでファイルを開いた場合、GzipFileオブジェクトは TextIOWrapper オブジェクトでラップされます。
compress()
compress() 関数は、引数として渡されたデータに圧縮を適用し、圧縮済みのバイトオブジェクトを返します。デフォルトの圧縮レベルは9です。
decompress()
decompress() 関数は、バイトオブジェクトを解凍し、非圧縮のデータを返します。
次の例では、圧縮データを書き込んでgzipファイルを作成しています。
>>> import gzip
>>> data = b'Python - Batteries included'
>>> with gzip.open("test.txt.gz", "wb") as f:
f.write(data)これにより、カレントディレクトリに「test.txt.gz」ファイルが作成されます。このgzipアーカイブには「test.txt」が含まれており、任意の解凍ユーティリティで確認できます。
プログラムからこの圧縮ファイルを読み込むには、次のようにします。
>>> with gzip.open("test.txt.gz", "rb") as f:
data = f.read()
>>> data
b'Python - Batteries included'既存ファイルをgzipアーカイブに圧縮する
既存のファイルをgzipアーカイブに圧縮するには、ファイルの内容を読み込んで bytearray に変換し、そのbytearrayオブジェクトをgzipファイルに書き込みます。以下の例では、カレントディレクトリに「zen.txt」ファイルが存在することを前提としています。
fp = open("zen.txt","rb")
>>> data = fp.read()
>>> bindata = bytearray(data)
>>> with gzip.open("zen.txt.gz", "wb") as f:
f.write(bindata)gzipアーカイブから非圧縮ファイルを取り出すには、次のように記述します。
>>> fp = open("zen1.txt", "wb")
>>> with gzip.open("zen.txt.gz", "rb") as f:
bindata = f.read()
>>> fp.write(bindata)
>>> fp.close()上記のコードを実行すると、カレントディレクトリに「zen1.txt」が作成され、「zen.txt」と同じ内容が含まれます。
GzipFileクラスを使った圧縮・解凍
これらの便利な関数に加えて、gzipモジュールには compress() および decompress() メソッドを定義した GzipFile クラスも用意されています。このクラスのコンストラクタは、file、mode、compressionlevel の各引数を受け取ります。それぞれの意味は前述の内容と同じです。
modeパラメータに「w」「wb」「wt」を指定すると、GzipFileオブジェクトは write() メソッドを提供し、渡されたデータを圧縮してgzipファイルに書き込みます。
>>> f = gzip.GzipFile("testnew.txt.gz","wb")
>>> data = b'Python - Batteries included'
>>> f.write(data)
>>> f.close()これにより「testnew.txt.gz」ファイルが作成されます。任意のユーティリティで解凍すると、「Python - Batteries included」というテキストを含むtestnew.txtが格納されていることを確認できます。
GzipFileオブジェクトを使ってgzipファイルを解凍する場合は、modeパラメータに「rb」を指定してオブジェクトを作成し、read() メソッドで非圧縮データを読み込みます。
>>> f = gzip.GzipFile("testnew.txt.gz","rb")
>>> data = f.read()
>>> data
b'Python - Batteries included'本記事では、Pythonのgzipモジュールを活用してgzip形式の圧縮・解凍を行う方法について学びました。便利な関数とGzipFileクラスの両方を使いこなせるようになると、ファイル操作の幅が大きく広がります。
-
Pythonで国勢調査データを分析する方法|インドの人口統計データを可視化してみよう
国勢調査(センサス)とは、特定の対象人口に関する情報を体系的に記録・収集する取り組みです。収集されるデータには、人口統計、経済状況、居住環境など、さまざまなカテゴリの情報が含まれています。これらのデータは、政府が現状を正確に把握し、将来に向けた政策立案を行ううえで重要な基礎資料となります。本記事では、Pythonを活用してインドの国勢調査データを分析する方法を解説します。人口動態や経済指標など複数の観点からデータを掘り下げ、その結果をグラフとして視覚的に表現します。使用するデータセットはKaggleから入手した「India Districts Census 2011」です。データの準備と読み込
-
Pythonでクイックソートを実装する方法|初心者向けにサンプルコードを徹底解説
この記事では、クイックソート(QuickSort)のアルゴリズムを使って配列を並べ替えるPythonプログラムの実装方法を、初心者にもわかりやすく解説します。 問題の定義 問題: 与えられた配列を、クイックソートの考え方を利用して昇順にソートすることです。 クイックソートは「分割統治法」と呼ばれる手法に基づく高速なソートアルゴリズムです。まず配列を基準値(ピボット)を境目に2つの部分に分割し、それぞれの部分配列を再帰的にソートしていくことで、最終的に全体が整列された配列を得られます。 クイックソートの仕組み 処理の流れは以下のとおりです。 配列からピボット(基準となる要素)を選びます。こ