如何解决.pkl文件无法加载、pickle.load报EOFError错误的问题
pickle加载pkl文件抛出EOFError解决方案
该错误本质是pickle读取文件时没有读到符合格式的序列化内容,通常由文件损坏、不完整、读取逻辑错误导致,对应解决方法如下:
- 第一步:校验目标文件完整性
运行以下代码检查文件大小:
如果输出为0,说明文件为空,直接重新上传、重新生成完整pkl文件即可,不需要尝试其他修复操作import os # 输出单位为字节 print(os.path.getsize("/content/classifier_10class.pkl")) - 第二步:优化文件读取写法
改用上下文管理器操作文件,避免手动关闭文件可能引发的IO异常,标准写法如下:import pickle filename = "/content/classifier_10class.pkl" with open(filename, 'rb') as infile: new_dict = pickle.load(infile) - 第三步:解决协议版本不兼容问题
如果文件大小正常,可尝试指定encoding参数兼容不同Python版本生成的pkl文件:import pickle filename = "/content/classifier_10class.pkl" with open(filename, 'rb') as infile: new_dict = pickle.load(infile, encoding='latin1') - 第四步:适配多对象序列化的pkl文件
如果该pkl文件是多次调用pickle.dump()写入了多个对象,需要循环读取直到触发EOFError:import pickle filename = "/content/classifier_10class.pkl" data_list = [] with open(filename, 'rb') as infile: while True: try: data_list.append(pickle.load(infile)) except EOFError: break
如果以上操作都无法解决,说明pkl文件本身内容损坏,需要重新获取完整的源文件。
内容的提问来源于stack exchange,提问作者Mayank Vachhani
相关产品推荐
相关产品推荐

