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

问题描述 投票:0回答:1

在一个小型数据采集项目中,我们使用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 读取更像上面的常规文件示例?

python pickle
1个回答
14
投票

是的,确实如此。使用下面的生成器使事件在循环中可读:

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()
© www.soinside.com 2019 - 2024. All rights reserved.