私がこのようなものを持っているとしましょう:
d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
progammaticallyを読み込む最も簡単な方法は何ですか。後でpythonからロードできるファイルに保存しますか?
どういうわけかそれをpythonソース(pythonスクリプト内から、手動ではなく!)から)として保存し、後でimport
として保存できますか?
それともJSONか何かを使うべきですか?
pickle モジュールを使用します。
import pickle
d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
afile = open(r'C:\d.pkl', 'wb')
pickle.dump(d, afile)
afile.close()
#reload object from file
file2 = open(r'C:\d.pkl', 'rb')
new_d = pickle.load(file2)
file2.close()
#print dictionary object loaded from file
print new_d
選択してください: Python Standard Library-Data Persistance 。どちらが最適かは、具体的なニーズによって異なります。
pickle
は、「任意のオブジェクトをファイルに書き込んで復元する」限り、おそらく最もシンプルで最も機能的です。カスタムクラスと循環参照を自動的に処理できます。
最高の酸洗いパフォーマンス(速度とスペース)を得るには、HIGHEST_PROTOCOL
でcPickle
を使用します。
永続的な辞書を提供するshelveモジュールを試してみてください、例えば:
import shelve
d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
shelf = shelve.open('shelf_file')
for key in d:
shelf[key] = d[key]
shelf.close()
....
# reopen the shelf
shelf = shelve.open('shelf_file')
print(shelf) # => {'qwerty': [4, 5, 6], 'abc': [1, 2, 3]}
[〜#〜] json [〜#〜] には問題がありますが、ニーズに合っている場合は次のようになります。
json
module として含まれていますpickle
に似たインターフェイスで、より複雑な状況を処理できますZope's Object Database を見るとさらに複雑になるかもしれません:-)おそらくあなたが持っているものに対してはやり過ぎですが、それはうまくスケーリングし、使用するのはそれほど難しくありません。
読みやすいJSONのような形式で保存する場合は、repr
を使用してオブジェクトをシリアル化し、eval
を使用してオブジェクトを逆シリアル化します。
repr(object) -> string
オブジェクトの正規の文字列表現を返します。ほとんどのオブジェクトタイプの場合、
eval(repr(object)) == object
。
前の提案に追加するために、ファイル形式を簡単に読み取りおよび変更できるようにしたい場合は、 [〜#〜] yaml [〜#〜] を使用することもできます。入れ子になったdictやリストに対しては非常にうまく機能しますが、より複雑なデータ構造(つまり、カスタムオブジェクトを含むもの)に対してもスケーリングします。その大きなプラスは、フォーマットが読みやすいことです。