存储Python字典

313 投票
9 回答
461313 浏览
提问于 2025-04-16 23:49

有没有简单的方法可以把字典(或者多个字典)存储到像JSON或者pickle这样的文件里呢?

举个例子,如果我有一些数据像这样:

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

我该怎么把它保存到一个文件里,然后再从这个文件中把它加载回程序呢?


JSON和Pickle也可以用来存储更复杂的结构化数据。这个问题的答案可能也会针对像上面提到的简单字典的情况。想了解更一般的方法,可以看看我该如何把结构化数据写入文件,然后再读回同样的结构呢?。需要注意的是,把数据转换成可以存储的格式叫做序列化,而重新创建数据结构叫做反序列化;为了以后使用而存储数据叫做持久化

还可以查看文件实际上包含什么,如何“读取”它们?什么是“格式”,我为什么要关心它们?,了解一些关于文件工作原理的理论,以及为什么结构化数据不能直接写入和读取文件。

9 个回答

9

另外,你可以看看这个加速包 ujson

import ujson

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

最简单的例子,直接写入一个文件:

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)
624

Pickle 保存数据:

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)

想了解更多关于 protocol 参数的信息,可以查看pickle模块的文档

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_keysindent,这样可以让结果看起来更漂亮。参数 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)

撰写回答