python 3保存字典

时间:2013-08-31 20:36:33

标签: python dictionary

我已经看过像SO这样的其他问题,但它们对我来说太技术了(只学了几天)。 我正在制作电话簿,我正在尝试保存这样的字典,

numbers = {}
def save(a):
   x = open("phonebook.txt", "w")
   for l in a:
       x.write(l, a[l])
   x.close()

但是我得到错误write()只接受1个参数而obv im传递2,所以我的问题是如何以初学者的方式做到这一点并且你能用非技术方式描述它。 非常感谢。

3 个答案:

答案 0 :(得分:4)

最好使用json模块将字典转储/加载到文件中:

>>> import json
>>> numbers = {'1': 2, '3': 4, '5': 6}
>>> with open('numbers.txt', 'w') as f:
...     json.dump(numbers, f)
>>> with open('numbers.txt', 'r') as f:
...     print json.load(f)
... 
{u'1': 2, u'3': 4, u'5': 6}

答案 1 :(得分:3)

虽然JSON是一个很好的选择并且是跨语言并且受浏览器支持,但是Python有自己的序列化格式,称为pickle,它更加灵活。

import pickle

data = {'Spam': 10, 'Eggs': 5, 'Bacon': 11}

with open('/tmp/data.pickle', 'w') as pfile:
    pickle.dump(data, pfile)

with open('/tmp/data.pickle', 'r') as pfile:
    read_data = pickle.load(pfile)

print(read_data)

Pickle是特定于Python的,不能与其他语言一起使用,并且要小心不要从不受信任的来源(例如通过网络)加载pickle数据,因为它不被认为是“安全的”。

Pickle也适用于其他数据类型,包括您自己的类的实例。

答案 2 :(得分:0)

您需要使用json模块和JSONEncode您的dict,然后您可以使用该模块将新对象写入文件。

当您阅读该文件时,您需要JSONDecode将其转换回python dict。

>>> import json
>>> d = {1:1, 2:2, 3:3}
>>> d
{1: 1, 2: 2, 3: 3}
>>> json.JSONEncoder().encode(d)
'{"1": 1, "2": 2, "3": 3}'
>>> with open('phonebook.txt', 'w') as f:
    f.write(json.JSONEncoder().encode(d))

>>> with open('phonebook.txt', 'r') as f:
    print f.readlines()

['{"1": 1, "2": 2, "3": 3}']