Python在Python3.4到3.7中将其pickle协议更改为4,并在Python3.8中再次将其更改为protocol=5。如何在python 3.8中打开较旧的酸洗文件?
我试过了:
>>> with open('data_frame_111.pkl','rb') as pfile:
... x1 = pickle.load(pfile)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: Can't get attribute 'new_block' on <module
'pandas.core.internals.blocks' from '/opt/anaconda3/lib/python3.8/site-
packages/pandas/core/internals/blocks.py'>
和
>>> with open('data_frame_111.pkl','rb') as pfile:
... x1 = unpkl.load(pfile, protocol=4)
但是,尽管协议是pickle.dump
中的一个关键字,但它不是pickle.load
的一部分。实例化pickle.Unpickler()
也不起作用。但显然应该有一种方法。
在Python3.7中,我可以import pickle5
并使用它来打开较新的pickles,但在Python3.8中找不到相反的文档。
发布于 2021-07-29 15:18:50
你需要升级到pandas的最新版本(对我来说是1.3.1)。或者,更准确地说,您执行pickle.dump(some_path)
时的pandas版本应该与您将执行pickle.load(some_path)
时的pandas版本相同。
发布于 2021-07-23 01:35:56
with open('data_frame_111.pkl','rb') as pfile:
x1 = pickle.load(pfile)
尝试更改为:
import pandas as pd
with open('data_frame_111.pkl','rb') as pfile:
x1 = pd.read_pickle(pfile)
由于安全漏洞的考虑,似乎已经有了一些变化。
https://stackoverflow.com/questions/68414632
复制相似问题