回答:
jsonモジュールは、ここでの良い解決策です。これは、プレーンテキスト出力のみを生成し、クロスプラットフォームおよびクロスバージョンであることは、ピクルよりも優れています。
import json
json.dumps(dict)
import json
私がしたようなことを忘れないでください!
辞書が大きすぎない場合は、str + evalで十分です。
dict1 = {'one':1, 'two':2, 'three': {'three.1': 3.1, 'three.2': 3.2 }}
str1 = str(dict1)
dict2 = eval(str1)
print dict1==dict2
ソースが信頼できない場合、追加のセキュリティのためにevalの代わりにast.literal_evalを使用できます。
pickle
モジュールを使用してディスクに保存し、後でロードします。
Python 3に組み込まれているastライブラリの関数literal_evalを使用しないのはなぜですか。evalの代わりにliteral_evalを使用することをお勧めします
import ast
str_of_dict = "{'key1': 'key1value', 'key2': 'key2value'}"
ast.literal_eval(str_of_dict)
実際の辞書として出力を提供します
{'key1': 'key1value', 'key2': 'key2value'}
辞書を文字列に変換したい場合は、Pythonのstr()メソッドを使用してみてください。
辞書が次のとおりだとします。
my_dict = {'key1': 'key1value', 'key2': 'key2value'}
そして、これは次のように行われます:
str(my_dict)
印刷されます:
"{'key1': 'key1value', 'key2': 'key2value'}"
これはお好みで簡単です。
私はあなたが使用を検討する必要があると思います shelve
永続的なファイル支援の辞書のようなオブジェクトを提供モジュールの。「実際の」ディクショナリの代わりに使用するのは簡単です。これは、プログラムをディクショナリのように使用できるものをほぼ透過的に提供します。明示的に文字列に変換してからファイルに書き込む必要はありません(またはその逆)逆)。
主な違いは最初に必要とされるopen()
最初の使用前に、その後、close()
それはあなたが完了したら(そしておそらくsync()
それをINGの、に応じて、writeback
使用オプション使用できます)。作成される「シェルフ」ファイルオブジェクトには、通常の辞書を値として含めることができるため、論理的にネストすることができます。
これは簡単な例です:
import shelve
shelf = shelve.open('mydata') # open for reading and writing, creating if nec
shelf.update({'one':1, 'two':2, 'three': {'three.1': 3.1, 'three.2': 3.2 }})
shelf.close()
shelf = shelve.open('mydata')
print shelf
shelf.close()
出力:
{'three': {'three.1': 3.1, 'three.2': 3.2}, 'two': 2, 'one': 1}
速度を気にする場合は、jsonと同じAPIを持つujson(UltraJSON)を使用します。
import ujson
ujson.dumps([{"key": "value"}, 81, True])
# '[{"key":"value"},81,true]'
ujson.loads("""[{"key": "value"}, 81, true]""")
# [{u'key': u'value'}, 81, True]
読み取りが必要な場合(JSONでもXMLでもない場合)にyamlを使用するか、読み取りが不要な場合はpickleを使用します。
書く
from pickle import dumps, loads
x = dict(a=1, b=2)
y = dict(c = x, z=3)
res = dumps(y)
open('/var/tmp/dump.txt', 'w').write(res)
読み返す
from pickle import dumps, loads
rev = loads(open('/var/tmp/dump.txt').read())
print rev
b
ここでファイルを開くときは、フラグを使用する必要があります。
dumps()
デフォルトはプロトコル0で、これはASCIIプロトコルです。だからこそ'rb'
私見は必要ありません。