将指针字典保存到文件

时间:2014-03-09 22:00:46

标签: python file-io dictionary

我正在尝试在python中创建一个家谱,我想创建一个Persons字典,其中键是人的名字,值是该名称的Person对象。

我可以很好地创建字典,我可以使用下面的代码保存它。

import os, ast

myFile = open( FILE, "r+" )     # Opens the file for reading and writing

tree = myFile.read()

if tree == "":
    tree = {}
else:
    tree = ast.literal_eval(tree)


def save():
    myFile.write(str(tree))
    myFile.close()

然而,当我重新加载我的程序并尝试读入字典时,我收到以下错误:

File "<unknown>", line 1
    {'Charlie': <__main__.Person object at 0x00000000032DB860>}
                ^
SyntaxError: invalid syntax

我怀疑评估者无法识别对象,因为一旦程序关闭,指针就不再存在。有没有办法可以保存我的字典,以便我可以重新加载它并访问所有Person对象的数据而不会在每次程序关闭时丢失它?

1 个答案:

答案 0 :(得分:1)

ast.literal_eval不用于评估和理解自定义对象。它用于评估字符串和文字安全。您需要使用pickle之类的序列来序列化数据。

>>> import pickle
>>> class Person(object):
...     def __init__(self, name):
...         self.name = name  
... 
>>> persons = {'Charlie': Person('Charlie')}
>>> with open(FILE, "wb") as my_file:
...     pickle.dump(persons, my_file)
...
>>> with open(FILE, "rb") as f:
...     result = pickle.load(f)
...     
... 
>>> result
{'Charlie': <__main__.Person object at 0x1598bd0>}

当你有大(或多个)对象时,你可以使用cPickle,其中用C代替python进行酸洗,从而提高速度。

如果您之前没有听说过对象序列化,请read this