存储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_keysindent来获得一个漂亮的结果。 参数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) 

如果你想要一个picklejson的替代品,你可以使用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都是相同的。 它给你一个“可存档”的字典,你可以使用它loaddump与档案交互。

写入文件:

 import json myfile.write(json.dumps(mydict)) 

从文件读取:

 import json mydict = json.loads(myfile.read()) 

myfile是您存储字典的文件的文件对象。