データを辞書オブジェクトに格納するプログラムを書いていますが、プログラムの実行中のある時点でこのデータを保存し、プログラムを再実行したときに辞書オブジェクトにロードする必要があります。辞書オブジェクトをファイルに書き出して辞書オブジェクトにロードできる文字列に変換する方法を教えてください。これは辞書を含む辞書をサポートすることを願っています。
jsonモジュール はここでは良い解決策です。それはプレーンテキスト出力のみを生成し、クロスプラットフォームおよびクロスバージョンであるという点でpickleよりも優れています。
json.dumps(dict)
あなたの辞書がそれほど大きくないならば、おそらく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 を使用できます。
json
を使用します。
import json
# convert to string
input = json.dumps({'id': id })
# load to dict
my_dict = json.loads(input)
pickle
モジュールを使ってディスクに保存し、後でロードします。
中国語の場合
import codecs
fout = codecs.open("xxx.json", "w", "utf-8")
dict_to_json = json.dumps({'text':"中文"},ensure_ascii=False,indent=2)
fout.write(dict_to_json + '\n')
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()
することです(そして使用されるwriteback
オプションによってはおそらくそれをsync()
ingすること)作成する「シェルフ」ファイルオブジェクトには、通常の辞書を値として含めることができ、それらを論理的にネストすることができます。
これは簡単な例です。
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を持つ json (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でもない)、または読みが必要ない場合は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
辞書をJSON(文字列)に変換
import json
mydict = { "name" : "Don",
"surname" : "Mandol",
"age" : 43}
result = json.dumps(mydict)
print(result[0:20])
あなたを取得します:
{「名前」:「Don」、「sur
文字列を辞書に変換する
back_to_mydict = json.loads(result)