Python3.8加载Pickle文件遇EOFError,求排查兼容性问题
解决
EOFError: Ran out of input 问题的排查思路 Python 3.8 和 pandas 1.4.4 之间不存在导致该错误的已知兼容性问题,这个报错更多和文件本身、读写操作的细节有关,以下是具体排查方向:
文件保存不完整
即便文件非空,也可能在保存过程中因程序崩溃、磁盘空间不足、写入中断等情况导致pickle数据截断。这种情况下文件看似有内容,但实际是不完整的无效数据。
解决:重新生成并保存pickle文件,确保保存过程正常完成,同时检查磁盘剩余空间是否充足。读取模式错误
pickle文件是二进制格式,必须用二进制读取模式打开。如果误用文本模式('r')读取,会导致数据解析异常,触发EOFError。
正确读取代码示例:
用pandas读取:import pandas as pd data = pd.read_pickle("your_file.pkl")用原生pickle模块读取:
import pickle with open("your_file.pkl", "rb") as f: data = pickle.load(f)注意必须使用
'rb'模式。协议版本的潜在影响
Python 3.8的pickle最高支持协议版本为5,如果该文件是在Python 3.10+环境下用HIGHEST_PROTOCOL(对应协议6)保存的,Python 3.8无法直接解析,但此时报错通常为UnpicklingError而非EOFError。如果怀疑是协议问题,可在保存时指定兼容协议:import pandas as pd pd.to_pickle(data, "your_file.pkl", protocol=5)文件损坏
磁盘错误、文件传输过程中丢失数据等情况会导致文件损坏。可尝试重新获取文件,或使用磁盘检测工具排查存储介质问题。
内容的提问来源于stack exchange,提问作者JPV
相关产品推荐
相关产品推荐

