Pythonの標準ライブラリであるio
モジュールには、BytesIO
という非常に便利なクラスが含まれています。このクラスを使用すると、メモリ上でバイナリデータを扱うことができます。バイナリデータとは、主に画像や音声などのデータのことを指します。
BytesIOとは
BytesIO
は、メモリ上でバイナリデータを扱うための機能です。バイナリデータとは主に画像や音声などのデータのことで、コンピューターで扱うデータは全てバイナリデータですが、テキストデータと対比して用いられます。
BytesIOの使い方
BytesIO
は、よく画像処理ライブラリPIL (Pillow)と組み合わせて用いられます。以下に、インターネット上の画像を取得し、BytesIO
を経由してPillowでファイルに保存するサンプルプログラムを示します。
# 必要なライブラリの読み込み
import io
import urllib.request
from PIL import Image
# 画像のURL 今回はPythonのロゴを使用
url = "https://www.python.org/static/img/python-logo@2x.png"
# 画像データを取得する
img_in = urllib.request.urlopen(url).read()
img_bin = io.BytesIO(img_in)
# Pillowで開き、画像を保存する
img = Image.open(img_bin)
img.save("logo.png","PNG")
このプログラムを実行すると、Pythonのロゴがlogo.png
ファイルに保存されます。
ファイルへの書き込み
BytesIO
の内容をファイルに書き込むためには、以下のようなコードスニペットを使用します。
with open('myfile.ext', 'wb') as f:
f.write(myBytesIOObj.getvalue())
myBytesIOObj.close()
このコードは、BytesIO
オブジェクトの内容をファイルに書き込むためのものです。
以上がPythonのBytesIO
の基本的な使い方となります。このようにBytesIO
は、Pythonでバイナリデータを効率的に扱うための強力なツールです。