如何阅读pickle文件?

时间:2016-01-28 17:22:52

标签: python pickle

我创建了一些数据并将其存储了几次,如下所示:

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

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

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

我只能看到上次的数据。 我怎样才能正确读取文件?

5 个答案:

答案 0 :(得分:48)

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

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

在反序列化第一个对象后,文件指针处于开始状态 下一个对象 - 如果你只是再次调用pickle.load,它将读取下一个对象 - 直到文件末尾。

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

答案 1 :(得分:24)

有一个 read_pickle 函数作为熊猫0.22+的一部分

import pandas as pd

object = pd.read_pickle(r'filepath')

答案 2 :(得分:6)

我开发了一种软件工具,可以直接在浏览器中打开(最多)Pickle文件(什么都没有传输,因此它是100%私有的):

https://pickleviewer.com/

答案 3 :(得分:5)

以下是如何编写和阅读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()

答案 4 :(得分:-12)

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

for line in x:
    print x

将打印每一行。 (在第二个声明中)