访问 "internal variables" 个列表
Accessing "internal variables" of list
我创建了一个列表的子类,它经常写入文件,这样即使在发生灾难性故障时我也可以恢复数据。但是,我不确定我是否以最佳方式处理 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)
,但也没用。
您可以使用 extend()
来加载您的 unpickled 列表:
self.extend(cPickle.load(inf))
您应该能够使用
将 pickle 直接加载到列表中
def load(self):
with open(self.filename, 'rb') as inf:
self[:] = cPickle.load(inf)
另一个观察,如果在保存过程中出现问题,您可能会删除最新的持久化列表,而无法恢复。您最好使用一个单独的文件(可能使用 tempfile 或类似文件,或者只管理 2 个文件),然后在您确定列表已成功保留后替换以前的文件。
您确实想用加载的列表替换当前列表的全部内容。为此,您可以使用切片:
self[:] = lst
我创建了一个列表的子类,它经常写入文件,这样即使在发生灾难性故障时我也可以恢复数据。但是,我不确定我是否以最佳方式处理 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)
,但也没用。
您可以使用 extend()
来加载您的 unpickled 列表:
self.extend(cPickle.load(inf))
您应该能够使用
将 pickle 直接加载到列表中def load(self):
with open(self.filename, 'rb') as inf:
self[:] = cPickle.load(inf)
另一个观察,如果在保存过程中出现问题,您可能会删除最新的持久化列表,而无法恢复。您最好使用一个单独的文件(可能使用 tempfile 或类似文件,或者只管理 2 个文件),然后在您确定列表已成功保留后替换以前的文件。
您确实想用加载的列表替换当前列表的全部内容。为此,您可以使用切片:
self[:] = lst