4

我看过其他关于 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,所以我的问题是我如何以初学者友好的方式做到这一点,你能否以非技术性的方式描述它。非常感谢。

4

3 回答 3

5

最好使用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}
于 2013-08-31T20:40:53.263 回答
5

虽然 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 也适用于其他数据类型,包括您自己的类的实例。

于 2013-08-31T21:14:02.930 回答
0

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

读取文件时,需要将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}']
于 2013-08-31T20:40:35.647 回答