Python:如何在文件中保存包含对象的列表?

Ale*_*jas 2 python class input object output

我试图创建不同的对象(使用Clases和对象)并将它们保存在文件中以便以后编辑或检索它们.然而,这看起来如何.

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)
Run Code Online (Sandbox Code Playgroud)

这个保存的片段显示了我如何保存列表中的信息(tema是类,其他东西是该类的方法):

newtheme=Tema()
newtheme.setInfo_name(newstr)
newtheme.setInfo_code(newcode)
GlobalCategories.append(newtheme)
SaveData(GlobalContent,GlobalCategories)
Run Code Online (Sandbox Code Playgroud)

X和Y是我存储对象的全局列表.(我注意到它在每个对象的内存中保存方向)当我第一次运行它时,它创建文件并将信息保存在文件中,但是如果我关闭它,尝试再次运行它并加载信息,程序擦除信息,并再次创建文件,因此存储的任何内容都消失了.

我不知道这是否是一种存储对象的方式,或者是否有更好的方式,所以任何建议都非常受欢迎.

@abernert:谢谢abarnert!我想要做的是保存一个包含两个列表的列表.例如,一个列表将保存一个品牌(丰田,尼桑等),另一个列出汽车模型(苔原,穆拉诺).现在每个元素都是我在创建时添加到列表中的对象. newtheme=Theme() newtheme.setInfo_name(newstr) GlobalCategories.append(newtheme) 这是我如何在全局列表中保存对象.GlobalCategories是我想在我关闭程序之后加载的两个列表中的一个(它就像示例中的汽车公司列表).现在,我有问题是在关闭并重新启动程序后从列表中加载对象,因为当我还没有关闭shell时,我能够从列表中检索和编辑它们.一旦我启动程序,我需要在各自的列表中加载和存储品牌和汽车对象,以便我以后可以操作它们.再次感谢阿瑟讷!

sbe*_*rry 6

很难知道是什么问题没有,你是如何试图使用你的背景LoadDataSaveData功能.但是,这是一个小型的演示,可以完成我认为你想要的.

import pickle
import random

def load_data():
    try:
        with open("bin.dat") as f:
            x, y = pickle.load(f)
    except:
        x, y = [], []
    return x, y

def save_data(data):
    with open("bin.dat", "wb") as f:
        pickle.dump(data, f)

if __name__ == "__main__":
    x, y = load_data()
    print x, y
    x.append(random.randint(1, 10))
    y.append(random.randint(1, 10))
    save_data([x, y])
Run Code Online (Sandbox Code Playgroud)

来自连续运行的输出

[] []
[9] [9]
[9, 10] [9, 9]
[9, 10, 2] [9, 9, 4]
[9, 10, 2, 5] [9, 9, 4, 1]
[9, 10, 2, 5, 6] [9, 9, 4, 1, 9]
[9, 10, 2, 5, 6, 10] [9, 9, 4, 1, 9, 1]
Run Code Online (Sandbox Code Playgroud)