在循环中从Python pickle文件加载数据?

在循环中从Python pickle文件加载数据?,python,pickle,Python,Pickle,在一个小型数据采集项目中,我们使用Python的pickle来存储记录的数据,即对于每个“事件”,我们使用 pkl.dump(event, f, pkl.HIGHEST_PROTOCOL) 其中将cPickle导入为pkl 在数据分析中,我们读取每个事件,但与普通文件不同,普通文件的处理方式非常优雅: with open(filename) as f: for line in f: do_something() 循环处理pickle文件中的所有数据这会变得有点尴尬:

在一个小型数据采集项目中,我们使用Python的
pickle
来存储记录的数据,即对于每个“事件”,我们使用

pkl.dump(event, f, pkl.HIGHEST_PROTOCOL)
其中
将cPickle导入为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

是否可以使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()