6

在一个小型数据采集项目中,我们使用 Pythonpickle来存储记录的数据,即对于每个“事件”,我们将其添加到输出文件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

是否可以让 pickle 阅读更像上面常规文件的示例?

4

1 回答 1

13

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

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()
于 2013-09-07T17:13:56.167 回答