如何读取pickle文件?

2024-05-20 03:43:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一些数据,并像这样多次存储:

with open('filename', 'a') as f:
        pickle.dump(data, f)

每次文件大小增加,但当我打开文件时

with open('filename', 'rb') as f:
    x = pickle.load(f)

我只能看到上次的数据。 如何正确读取文件?


Tags: 文件数据dataaswithloadopenfilename
3条回答

你没有做任何事情,你只是加载文件。

for line in x:
    print x

将打印每行。(在第二个陈述中)

Pickle一次序列化单个对象,并读回单个对象- pickled数据按顺序记录在文件中。

如果您只需要pickle.load,那么您应该读取序列化到文件中的第一个对象(而不是您编写的最后一个对象)。

在取消第一个对象的序列化之后,文件指针位于 对于下一个对象-如果您只是再次调用pickle.load,它将读取下一个对象-执行此操作直到文件结束。

objects = []
with (open("myfile", "rb")) as openfile:
    while True:
        try:
            objects.append(pickle.load(openfile))
        except EOFError:
            break

下面是一个如何编写和读取pickle文件的示例。请注意,如果继续将pickle数据追加到文件中,则需要继续从文件中读取数据,直到找到所需的内容或到达文件末尾时生成异常。这就是最后一个函数的功能。

import os
import pickle


PICKLE_FILE = 'pickle.dat'


def main():
    # append data to the pickle file
    add_to_pickle(PICKLE_FILE, 123)
    add_to_pickle(PICKLE_FILE, 'Hello')
    add_to_pickle(PICKLE_FILE, None)
    add_to_pickle(PICKLE_FILE, b'World')
    add_to_pickle(PICKLE_FILE, 456.789)
    # load & show all stored objects
    for item in read_from_pickle(PICKLE_FILE):
        print(repr(item))
    os.remove(PICKLE_FILE)


def add_to_pickle(path, item):
    with open(path, 'ab') as file:
        pickle.dump(item, file, pickle.HIGHEST_PROTOCOL)


def read_from_pickle(path):
    with open(path, 'rb') as file:
        try:
            while True:
                yield pickle.load(file)
        except EOFError:
            pass


if __name__ == '__main__':
    main()

相关问题 更多 >