如何使用 pickle.load() 读取完整文件?

How to read complete file usind pickle.load()?

假设,我想使用 pickle.load() 读取整个文件,而不只是一行。我知道我可以使用 try - except 但是有没有其他方法可以读取它?
我正在使用这个:


    import pickle
    d = {}
    for i in range(2):
        roll_no = int(input("Enter roll no: "))
        name = input("Enter name: ")
        d[roll_no] = name

     f = open("test.dat", "ab")
     pickle.dump(d, f)
     f.close()

     f = open("test.dat", "rb")
     while True:
         try:
            print(pickle.load(f))
        except EOFError:
            break

官方 Python 库不支持在单个指令中执行此操作。不过,您可以定义自己的辅助函数:

import io
import pickle

from typing import List

def unpickle(file: io.IOBase) -> List[object]:
    result = []
    while True:
        try:
            result.append(pickle.load(file))
        except EOFError:
            break
    return result

你可以这样称呼它

with open('data.pickle', 'rb') as f:
    objects = unpickle(f)

objects 将包含 所有 已在 data.pickle 中序列化的对象。

你可以用file.tell看看你是否在EOF

f = open("test.dat", "rb")
# go to end of file and get position
size = f.seek(0, 2)
# now return to the front and pull pickle records
f.seek(0)    
while f.tell() < size:
    print(pickle.load(f))