Python PR

【Python】いろんな型のオブジェクトをファイルに読み書きする方法

記事内に商品プロモーションを含む場合があります

この記事では、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文字列に変換してファイルに読み書きする方法

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ