在新行中转储(泡菜)Python

Dump (pickle) in new line Python

所以我想使用 Pickle 在二进制文件的新行中写入列表的每个元素,我希望以后也能够访问这些词典。

import pickle    
with open(r'student.dat','w+b') as file: 
for i in [{1:11},{2:22},{3:33},{4:44}]:
    pickle.dump(i,file)
file.seek(0)
print(pickle.load(file))

输出:

{1: 11}

有人可以解释为什么其余的元素没有被转储或建议另一种写在新行中的方法吗? 我正在使用 Python 3

它们都被倾倒了,但每个倾倒都是分开的;要全部加载它们,您需要将它们与 load 个调用相匹配。

import pickle    
with open(r'student.dat','w+b') as file: 
    for i in [{1:11},{2:22},{3:33},{4:44}]:
        pickle.dump(i,file)
file.seek(0)
print(pickle.load(file))


import pickle    
with open(r'student.dat','w+b') as file: 
    for i in [{1:11},{2:22},{3:33},{4:44}]:
        pickle.dump(i,file)
file.seek(0)
for _ in range(4):
    print(pickle.load(file))

如果您不想执行多个加载,请将它们腌制为单个数据结构(例如,dict 的原始 list 一次全部处理)。

在 none 这些情况下,您正在写换行符,也不应该; pickle 是一个二进制协议,这意味着换行符只是另一个具有独立含义的字节,并且尝试将换行符注入流中会妨碍加载数据,并且有拆分数据位的风险(如果您实际上在加载时间)。