我习惯使用CSV文件在Python中输入和输出数据,但这存在明显的挑战。是否有简单的方法将字典(或字典集)存储在JSON或pickle文件中?
例如:
data = {}
data ['key1'] = "keyinfo"
data ['key2'] = "keyinfo2"
我想知道如何保存这个,然后如何加载它回来。
我习惯使用CSV文件在Python中输入和输出数据,但这存在明显的挑战。是否有简单的方法将字典(或字典集)存储在JSON或pickle文件中?
例如:
data = {}
data ['key1'] = "keyinfo"
data ['key2'] = "keyinfo2"
我想知道如何保存这个,然后如何加载它回来。
当前回答
泡菜保存:
try:
import cPickle as pickle
except ImportError: # Python 3.x
import pickle
with open('data.p', 'wb') as fp:
pickle.dump(data, fp, protocol=pickle.HIGHEST_PROTOCOL)
有关协议参数的其他信息,请参阅pickle模块文档。
泡菜负载:
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将按字母顺序对键进行排序,indent将使用indent=N个空格对数据结构进行缩进。
json.dump(data, fp, sort_keys=True, indent=4)
JSON负载:
with open('data.json', 'r') as fp:
data = json.load(fp)
其他回答
如果保存为JSON文件,最好和最简单的方法是:
import json
with open("file.json", "wb") as f:
f.write(json.dumps(dict).encode("utf-8"))
如果您正在序列化,但在其他程序中不需要数据,我强烈推荐使用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()
较短的代码
保存和加载所有类型的python变量(包括字典),每个变量只需一行代码。
data = {'key1': 'keyinfo', 'key2': 'keyinfo2'}
保存:
pickle.dump(data, open('path/to/file/data.pickle', 'wb'))
加载:
data_loaded = pickle.load(open('path/to/file/data.pickle', 'rb'))
也许这很明显,但在我试图使它更短之前,我在顶部的答案中使用了两行解。
写入文件:
import json
myfile.write(json.dumps(mydict))
从文件中读取:
import json
mydict = json.loads(myfile.read())
Myfile是存放dict的文件的file对象。
也可以看到加速包ujson:
import ujson
with open('data.json', 'wb') as fp:
ujson.dump(data, fp)