我习惯使用CSV文件在Python中输入和输出数据,但这存在明显的挑战。是否有简单的方法将字典(或字典集)存储在JSON或pickle文件中?

例如:

data = {}
data ['key1'] = "keyinfo"
data ['key2'] = "keyinfo2"

我想知道如何保存这个,然后如何加载它回来。


当前回答

如果您正在序列化,但在其他程序中不需要数据,我强烈推荐使用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()

其他回答

如果您正在序列化,但在其他程序中不需要数据,我强烈推荐使用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'))

也许这很明显,但在我试图使它更短之前,我在顶部的答案中使用了两行解。

也可以看到加速包ujson:

import ujson

with open('data.json', 'wb') as fp:
    ujson.dump(data, fp)

最小示例,直接写入文件:

import json
json.dump(data, open(filename, 'wb'))
data = json.load(open(filename))

或安全地打开/关闭:

import json
with open(filename, 'wb') as outfile:
    json.dump(data, outfile)
with open(filename) as infile:
    data = json.load(infile)

如果你想保存在字符串而不是文件中:

import json
json_str = json.dumps(data)
data = json.loads(json_str)

如果保存为JSON文件,最好和最简单的方法是:

import json
with open("file.json", "wb") as f:
    f.write(json.dumps(dict).encode("utf-8"))