【发布时间】:2014-10-13 13:28:20
【问题描述】:
我正在 Linux 机器上保存一个 Python 数据集,其中包含一个类、引用的字典和类。该文件在 Windows 或 Linux 上正常加载,但在 mac 上,如果使用 'rb' 修饰符加载,则会出现以下错误:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1378, in load
return Unpickler(file).load()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
KeyError: '\x00'
如果使用 'rU' 修饰符加载,则会出现此错误:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1378, in load
return Unpickler(file).load()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
KeyError: '\x06
尝试使用 pickle、cPickle 和 dill 进行保存和加载,结果都相似。
更新: 在 linux 中保存并在 mac large pandas DataFrames 中加载时,我遇到了这个确切的错误:
import pandas as pd
import numpy as np
pd.DataFrame(np.random.randn(100000,5)).to_pickle("1.dat")
尝试使用此代码打开 1.dat im mac 时再次出现错误:
pd.read_pickle("1.dat")
【问题讨论】:
-
你在 Windows 和 Linux 中使用哪个 Python 版本?
-
全部使用 Python 2.7.8,cPickle v1.71,pickle 修订版 72223
-
你能给出一个可能减少的例子来说明你正在酸洗的东西会重现错误吗?这样人们就可以轻松尝试
-
谢谢。出现此错误时,文件已正确关闭。我正在腌制的类包含三个字典,其中键是字符串,值是不从对象继承的类。母类有一个保存方法,如下所示:
def Save(self, filename): with open(filename, 'wb') as fh: cPickle.dump(self, fh) -
@Korem:来自 python 的文件句柄在不同的操作系统上表现不同。所以,在没有看到代码的情况下,这是一个有效的问题。
标签: python linux macos pandas pickle