在一个小型数据采集项目中,我们使用Python的pickle
来存储记录的数据,即对于每个“事件”,我们将其添加到输出文件f
中
pkl.dump(event, f, pkl.HIGHEST_PROTOCOL)
其中import cPickle as pkl
。
在分析数据的过程中,我们读取了每个事件,但与普通文件相比,处理可以是一个相当优雅的方式:
with open(filename) as f:
for line in f:
do_something()
循环遍历pickle文件中的所有数据,这变得有点尴尬:
with open(filename) as f:
try:
while True:
event = pkl.load(f)
do_something()
except (EOFError, UnpicklingError):
pass
是否有可能使腌菜阅读更像上面常规文件的例子?
答案 0 :(得分:10)
是的,的确如此。使用下面的这个生成器可以在循环中读取事件:
def pickleLoader(pklFile):
try:
while True:
yield pkl.load(pklFile)
except EOFError:
pass
现在你可以简单地写一下:
with open(filename) as f:
for event in pickleLoader(f):
do_something()