在一个小型数据采集项目中,我们使用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(line)
循环pickle文件中的所有数据,这变得有点尴尬:
with open(filename) as f:
try:
while True:
event = pkl.load(f)
do_something(event)
except (EOFError, UnpicklingError):
pass
是否可以使 pickle 读取更像上面的常规文件示例?
是的,确实如此。使用下面的生成器使事件在循环中可读:
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()