【发布时间】:2015-03-23 13:12:47
【问题描述】:
我创建了一个列表的子类,它每隔一段时间就写入文件,这样即使发生灾难性故障,我也可以恢复数据。但是,我不确定我是否以最佳方式处理 IO。
import cPickle
class IOlist(list):
def __init__(self, filename, sentinel):
list.__init__(self)
self.filename = filename
def save(self):
with open(self.filename, 'wb') as ouf:
cPickle.dump(list(self), ouf)
def load(self):
with open(self.filename, 'rb') as inf:
lst = cPickle.load(inf)
for item in lst:
self.append(item)
在我读入文件后将每个对象一个一个地添加回列表中感觉不对。有一个更好的方法吗?我希望您可以访问列表对象的内部并执行类似的操作
def load(self):
with open(self.filename, 'rb') as inf:
self.list_items = cPickle.load(inf)
不幸的是,vars(list) 似乎表明该列表没有 __dict__ 属性,我不知道在哪里可以查找列表中的项目的存储位置。
我尝试了self = cPickle.load(inf),但也没有用。
【问题讨论】:
-
list对象是用 C 编码的,您需要访问 C 结构来直接分配元素。你不想去那里。 -
您确定要将已读项目附加到列表中吗?你不想替换现有的内容吗?
标签: python python-2.7 data-structures io