存储Python字典
我习惯使用.csv文件将数据导入和导出Python,但是对此有明显的挑战。 任何关于在json或pck文件中存储字典(或字典集)的简单方法的build议? 例如:
data = {} data ['key1'] = "keyinfo" data ['key2'] = "keyinfo2"
我想知道如何保存这个,然后如何加载它。
泡菜保存:
import cPickle as pickle with open('data.p', 'wb') as fp: pickle.dump(data, fp)
腌渍负荷:
with open('data.p', 'rb') as fp: data = pickle.load(fp)
JSON保存:
import json with open('data.json', 'w') as fp: json.dump(data, fp)
提供额外的参数,如sort_keys
或indent
来获得一个漂亮的结果。 参数sort_keys将按字母顺序对键进行sorting, 缩进将使用indent=N
空格缩进数据结构。
json.dump(data, fp, sort_keys=True, indent=4)
JSON负载:
with open('data.json', 'r') as fp: data = json.load(fp)
最小的例子,直接写入一个文件:
import json json.dump(data, open(filename, 'wb')) data = json.load(open(filename))
或安全地打开/closures:
import json with open(filename, 'wb') as outfile: json.dump(data, outfile) with open(filename) as infile: data = json.load(infile)
如果你想把它保存在一个string而不是一个文件中:
import json json_str = json.dumps(data) data = json.loads(json_str)
如果你是序列化后,但不需要在其他程序中的数据,我强烈build议shelve
模块。 把它看作是一个永久性的字典。
myData = shelve.open('/path/to/file') # check for values. keyVar in myData # set values myData[anotherKey] = someValue # save the data for future use. myData.close()
另请参阅加速包ujson。 https://pypi.python.org/pypi/ujson
import ujson with open('data.json', 'wb') as fp: ujson.dump(data, fp)
如果你想要一个pickle
或json
的替代品,你可以使用klepto
。
>>> init = {'y': 2, 'x': 1, 'z': 3} >>> import klepto >>> cache = klepto.archives.file_archive('memo', init, serialized=False) >>> cache {'y': 2, 'x': 1, 'z': 3} >>> >>> # dump dictionary to the file 'memo.py' >>> cache.dump() >>> >>> # import from 'memo.py' >>> from memo import memo >>> print memo {'y': 2, 'x': 1, 'z': 3}
使用klepto
,如果您使用了serialized=True
,则字典将被作为pickle字典而不是以明文forms写入到memo.pkl
中。
你可以在这里获得klepto
: https : //github.com/uqfoundation/klepto
dill
可能是一个更好的select,然后pickle
自己,因为dill
可以序列几乎任何东西在python。 klepto
也可以使用dill
。
你可以在这里得到dill
: https : //github.com/uqfoundation/dill
前几行的额外的巨型巨型是因为klepto
可以configuration为将字典存储到文件,目录上下文或SQL数据库。 无论您select什么后端存档,API都是相同的。 它给你一个“可存档”的字典,你可以使用它load
和dump
与档案交互。
写入文件:
import json myfile.write(json.dumps(mydict))
从文件读取:
import json mydict = json.loads(myfile.read())
myfile
是您存储字典的文件的文件对象。