LoginSignup
6
4

More than 3 years have passed since last update.

【Python】pickle モジュールを使用すると、オブジェクトをファイルに保存することができる

Posted at

pickle モジュールを使用すると、オブジェクトを保存することができる

Python にて、辞書型のデータをローカル上に保存する処理を作成する際に、
「あれ?どうやって保存するんだ?」と疑問に思い、調べた結果、
pickleモジュールの存在を初めて知ったので、学習ノートとして残しておきます。(最終的に JSON に保存しました)

要約

  • pickle モジュールを使用すると、オブジェクトを別ファイルにバイナリ形式として保存することができる。
  • しかし、pickle モジュールはセキュリティ的観点より、使用はあまり推奨されていない。
  • また、保存したファイルは Python 固有のものである。

pickle モジュールについて

pickle モジュールを利用するとオブジェクトをバイナリ形式でファイルに保存することができます。

pickle モジュールは Python オブジェクトの直列化および直列化されたオブジェクトの復元のためのバイナリプロトコルを実装しています。
Python公式ドキュメント:pickle

ちなみに「pickle」とは、「漬物」という意味だそうです。すぐに消えてしまうオブジェクトを保存するということから来ているのでしょうか。なんかかっこいい

pickle モジュールを使ってみる

ファイル作成

バイナリ形式の書き込みモードでファイルを開き、保存したいオブジェクトをpickle.dump()ですれば、保存できます。

createPickle.py
import pickle

d = {"name":"ndj", "age":25, "hobby": "YouTube"}
with open("sample.pickle", mode="wb") as f:
    pickle.dump(d, f)

ファイル読み込み

バイナリ形式の読み込みモードでファイルを開き、pickle.loadすれば読み込めます。

loadPickle.py
import pickle

d = {}
with open("sample.pickle", mode="rb") as f:
    d = pickle.load(f)

辞書型以外のオブジェクトも保存することができる

ちなみに辞書型以外のオブジェクトも同様の方法で保存することができます。

otherPickle.py
import pickle

def dumpPickle(fileName, obj):
    with open(fileName, mode="wb") as f:
        pickle.dump(obj, f)

dumpPickle("lst.pickle", [1,2,3,4,5])
dumpPickle("str.pickle", "helooooooo!!")
dumpPickle("int.pickle", 11114)

読み込みも同様です。

otherPickle.py
import pickle

def loadPickle(fileName):
    with open(fileName, mode="rb") as f:
        return pickle.load(f)

lst = loadPickle("lst.pickle")
_str = loadPickle("str.pickle")
_int = loadPickle("int.pickle")

使用には注意が必要らしい

Python の公式ドキュメントの Pickle のページトップには警告が記述されています。

警告 The pickle module is not secure. Only unpickle data you trust.
It is possible to construct malicious pickle data which will execute arbitrary code during unpickling.
Python公式ドキュメント:pickle

あんまり自信がないですが、ファイルの中身をオブジェクトに変換する過程でファイルの中身がコードだった場合、実行されちゃうよってことでしょうか。。
意図しないコードが実行されたら困るので、使い所には気を付ける必要がありそうです。

参考

Python 公式:Pickle

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4