如何读取腌菜文件?

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

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

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

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

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

417426 次浏览

Pickle 一次序列化一个对象,并读回一个对象- 酸洗后的数据按顺序记录在文件上。

如果您只是执行 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()

有一个 读一读腌菜函数作为熊猫的一部分0.22 +

import pandas as pd


obj = pd.read_pickle(r'filepath')

我开发了一个软件工具,可以直接在你的浏览器中打开(大部分) Pickle 文件(没有任何东西被传输,所以它是100% 私有的) :

Https://pickleviewer.com/

现在它主机在这里: https://fire-6dcaa-273213.web.app/

编辑: 如果您想在某个地方托管它,这里提供: https://github.com/ch-hristov/Pickle-viewer

随便找个地方举办吧。