保存指向Fi的指针字典

2024-04-26 04:46:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python创建一个族谱,我想创建一个Persons字典,其中键是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对象的所有数据,而不会在每次程序关闭时丢失它?你知道吗


Tags: 对象代码import程序tree字典osast
1条回答
网友
1楼 · 发布于 2024-04-26 04:46:38

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。你知道吗

相关问题 更多 >

    热门问题