この記事では、Pythonのオブジェクトをファイルに読み書きする方法を解説します。
オブジェクトをファイルに読み書きするには、pickle
モジュールを使います。
Linkpickle --- Python オブジェクトの直列化 — Python 3.10.4 ドキュメント
pickle
モジュールは信頼できないデータには使用しないでください。また、書き込んだデータは改ざんされてしまう可能性があるので注意してください。
それでは、pickle
モジュールの使い方を見ていきましょう!
オブジェクトをファイルに書き込む
任意のオブジェクトをファイルに書き込むには、pickle
モジュールのdump()
関数を使います。
import pickle
pickle.dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None)
サンプル
適当なオブジェクトをファイルに書き込んでみます。
import pickle
data = {
'id': 12345,
'name': '田中太郎'
}
with open('data.pickle', 'wb') as f:
pickle.dump(data, f)
上記コードを実行するとdata.pickle
というファイルが生成されます。
ファイルに書き込んだオブジェクトを読み込む
dump()
関数でファイルに書き込んだオブジェクトを読み込むにはpickle
モジュールのload()
関数を使います。
import pickle
pickle.load(file, *, fix_imports=True, encoding='ASCII', errors='strict', buffers=None)
サンプル
では、先ほど生成したdata.pickle
からオブジェクトを読み込んでみましょう!
import pickle
with open('data.pickle', 'rb') as f:
data = pickle.load(f)
print(data)
print(type(data))
実行結果
{'id': 12345, 'name': '田中太郎'}
<class 'dict'>
ファイルに書き込んだ辞書を辞書として読み込むことができました!
自作クラスを読み書きする
pickle
はユーザー定義のクラスも読み書きすることができます。
# 簡単なクラス
class MyClass:
def __init__(self, num, name):
self.num = num
self.name = name
def __str__(self):
return f'{self.num}, {self.name}'
# インスタンス化
mc = MyClass(1, '田中太郎')
import pickle
# 書き込み
with open('data.pickle', 'wb') as f:
pickle.dump(mc, f)
# 読み込み
with open('data.pickle', 'rb') as f:
data = pickle.load(f)
print(data)
print(type(data))
実行結果
1, 田中太郎
<class '__main__.MyClass'>
まとめ
この記事では、Pythonのいろいろな型のオブジェクトをファイルに読み書きする方法を解説しまいした。
pickleは、Pythonに用意されている多くの組み込み型に使用することができます。その代わりに生成したデータはPythonでしか運用できません。
Python以外でも使用したい場合はJSONを使うと便利です。
オブジェクトをJSON文字列に変換してファイルに読み書きする方法
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ