我正在尝试创建不同的对象(使用类和对象)并将它们保存在文件中以便以后编辑或检索。但是它看起来像这样。
GlobalCategories=[]
GlobalContent=[]
def LoadData(x,y):
import pickle
with open('bin.dat') as f:
x,y = pickle.load(f)
def SaveData(x,y):
import pickle
with open('bin.dat', 'wb') as f:
pickle.dump([x,y], f)
def Loader(x,y):
try:
LoadData(x,y)
except:
SaveData(x,y)
以下是示例代码,展示了我如何保存列表信息(其中"tema"是类名,其它部分为该类的方法):
newtheme=Tema()
newtheme.setInfo_name(newstr)
newtheme.setInfo_code(newcode)
GlobalCategories.append(newtheme)
SaveData(GlobalContent,GlobalCategories)
X和Y是全局列表,我在其中存储对象(我注意到它将每个对象的方向保存在内存中)。当我第一次运行它时,它创建文件并将信息保存在文件中,但是如果我关闭它,再次运行它并加载信息,则程序会删除信息并重新创建文件,因此存储的所有内容都消失了。
我不知道这是否是存储对象的正确方法,或者是否有更好的方法,因此非常欢迎任何建议。
@abernert:谢谢您,abarnert! 我想做的是保存一个包含两个列表的列表。例如,一个列表将保存制造商(丰田,尼桑等),另一个列表将保存汽车型号(Tundra,Murano)。现在,每个元素都是创建时添加到列表中的对象。
newtheme=Theme()
newtheme.setInfo_name(newstr)
GlobalCategories.append(newtheme)
这就是我如何在全局列表中保存对象。GlobalCategories是我想要在关闭程序后稍后加载的那两个列表中的一个(它将类似于上述示例中的汽车公司列表)。现在,我遇到的问题是,在关闭并重新启动程序后从列表中加载对象,因为当我没有关闭shell时,我能够检索和编辑它们。
我需要在启动程序后将制造商和汽车对象分别存储在各自的列表中,以便稍后对它们进行操作。再次感谢abernert!
LoadData
函数并没有做任何有用的事情,它只是重新绑定了本地名称x
和y
。在 Python 中,你不能像那样通过引用传递名称。 - abarnertexcept
子句将使调试代码变得非常非常困难。将Loader
更改为except Exception as e:
并添加print(e)
或其他内容,以查看它是否意外地未能加载数据,而是在您不想要它的时候进行了保存数据。 - abarnert