Python中如何读取pickle文件中所有追加写入的dict字典?
pickle追加写入后无法读取全部对象的解决方法
问题原因
pickle.load()单次调用只会从文件流中读取一个序列化的pickle对象,你分两次追加写入了两个独立的pickle对象,单次调用自然只能获取到第一个写入的字典。
解决方法
循环调用pickle.load()读取文件,直到触发EOFError(代表文件内容已全部读取完毕),即可把所有追加写入的对象都读取出来,代码示例如下:
import pickle # 存储所有读取到的字典 res_list = [] with open('test.ts', 'rb') as f: while True: try: temp = pickle.load(f) res_list.append(temp) except EOFError: break # 输出所有读取到的字典 print(res_list) # 输出:[{'first': 1}, {'second': 2}] # 如果需要合并为一个字典,可执行如下操作 merged_dict = {} for item in res_list: merged_dict.update(item) print(merged_dict) # 输出:{'first': 1, 'second': 2}
补充说明
- 多次调用
pickle.dump()追加写入同一个文件是pickle官方支持的合法用法,读取时只要按上述循环加载的方式处理即可。 - 该方法仅适用于写入时是多次dump独立对象生成的pickle文件,如果写入时是把多个对象打包为一个整体dump的,不需要循环读取。
内容的提问来源于stack exchange,提问作者ali.es
相关产品推荐
相关产品推荐

