Python

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

この記事では、Pythonのさまざまな型のオブジェクトをファイルに読み書きする方法を解説します。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, pickle.HIGHEST_PROTOCOL)

上記コードを実行すると「data.pickle」というファイルが生成されます。

オブジェクトをファイルに読み込む

書き込んだオブジェクトをファイルから読み込むには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 __repr__(self):
        return f'{self.num}, {self.name}'


# インスタンス化
mc = MyClass(1, '田中太郎')


import pickle

# 書き込み
with open('data.pickle', 'wb') as f:
    pickle.dump(mc, f, pickle.HIGHEST_PROTOCOL)

# 読み込み
with open('data.pickle', 'rb') as f:
    data = pickle.load(f)

print(data)
print(type(data))

実行結果

1, 田中太郎
<class '__main__.MyClass'>

まとめ

この記事では、Pythonのいろいろな型のオブジェクトをファイルに読み書きする方法を解説しまいした。

pickleは、Pythonに用意されている多くの組み込み型に使用することができます。その代わり、生成したデータはPythonでしか運用できません。

他でも使用したい場合はJSONを使うと便利です。

【Python】オブジェクトをJSON文字列に変換するこの記事では、オブジェクトをJSON文字列に変換(エンコード)する方法を解説します。JSON文字列に変換することでオブジェクトをファイルに書き込むことができます。また、書き込んだJSON文字列を読み込んでオブジェクトに変換(デコード)することもできます。...

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

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』