从文件读取对象(在将其转储到文件后)
我写了一个函数,可以把对象写入文件:
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()