Categories: Python

【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文字列に変換してファイルに読み書きする方法

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

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

View Comments

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago