Python
 Computer >> コンピューター >  >> プログラミング >> Python

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クラスの両方を使いこなせるようになると、ファイル操作の幅が大きく広がります。

  1. Pythonで国勢調査データを分析する方法|インドの人口統計データを可視化してみよう

    国勢調査(センサス)とは、特定の対象人口に関する情報を体系的に記録・収集する取り組みです。収集されるデータには、人口統計、経済状況、居住環境など、さまざまなカテゴリの情報が含まれています。これらのデータは、政府が現状を正確に把握し、将来に向けた政策立案を行ううえで重要な基礎資料となります。本記事では、Pythonを活用してインドの国勢調査データを分析する方法を解説します。人口動態や経済指標など複数の観点からデータを掘り下げ、その結果をグラフとして視覚的に表現します。使用するデータセットはKaggleから入手した「India Districts Census 2011」です。データの準備と読み込

  2. Pythonでクイックソートを実装する方法|初心者向けにサンプルコードを徹底解説

    この記事では、クイックソート(QuickSort)のアルゴリズムを使って配列を並べ替えるPythonプログラムの実装方法を、初心者にもわかりやすく解説します。 問題の定義 問題: 与えられた配列を、クイックソートの考え方を利用して昇順にソートすることです。 クイックソートは「分割統治法」と呼ばれる手法に基づく高速なソートアルゴリズムです。まず配列を基準値(ピボット)を境目に2つの部分に分割し、それぞれの部分配列を再帰的にソートしていくことで、最終的に全体が整列された配列を得られます。 クイックソートの仕組み 処理の流れは以下のとおりです。 配列からピボット(基準となる要素)を選びます。こ