从文件读取对象(在将其转储到文件后)

0 投票
4 回答
1831 浏览
提问于 2025-04-16 08:42

我写了一个函数,可以把对象写入文件:

def StoreToFile(Thefile,objekt):
    utfil=None
    utfil=open(Thefile,'wb')
    pickle.dump(objekt,utfil)
    return True
    if utfil is not None:
    utfil.close()

这是我用来调用这个函数的代码:

for st in Stadion:
    StoreToFile(r'C:\pytest\prod.psr',st)

这个方法运行得很好,但我该怎么把这些对象再放回一个列表里呢?

我有提取对象的代码,但我不知道怎么遍历这些对象,把它们放到一个新的列表里。

到目前为止,我有这个:

def ReadFromFile(filename):
    infile=None
    infile=open(filename,'rb')
    objekt=pickle.load(infile)

4 个回答

1

你只需要把整个列表进行序列化保存就可以了。

2

你的代码有点搞笑,utfil = None 这个做法没什么意义,因为只有在出现异常的时候,open(...) 才会失败,而一旦出现异常,后面的代码就不会执行了。正确的做法是使用一个叫做 上下文管理器 的东西,也就是 with 语句。

所以,应该这样做:

def storeToFile(path, o):
    try:
        with open(path, "wb") as f:
            pickle.dump(o, f)
            return True
    except pickle.PicklingError, IOError:
        return False
2
for st in Stadion:
    StoreToFile(r'C:\pytest\prod.psr',st)

这个方法效果很好。

如果你指的是“没有错误地运行”,那么是的,它确实“有效”。这段代码会不断覆盖文件,所以文件里只会保留列表中的最后一个项目。

可以用这个代替:

StoreToFile(r'C:\pytest\prod.psr', Stadion)

你的 ReadFromFile() 函数应该可以正常工作,并返回一个列表(假设上面的修复有效)。

另外,我也不太明白这个是干嘛的:

return True
if Thefile.close()

撰写回答