Min*_*inu 5 python module importerror
__builtin__\r我正在尝试在 python3.6 中加载(复制的)pickle 对象,但这样做时出现导入错误。
with open('FilePath/FileName.pkl', "rb") as file:
file = pickle.load(file)
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-36-b39fbab9bab4> in <module>() 1 with open('FilePath/FileName.pkl', "rb") as file: ----> 2 file = pickle.load(file) ModuleNotFoundError: No module named '__builtin__\r'
当我在 python 2.7 中尝试相同的操作时,我再次收到模块的导入错误__builtin__:
Run Code Online (Sandbox Code Playgroud)--------------------------------------------------------------------------- ImportError Traceback (most recent call last) <ipython-input-3-12ac6524bf1a> in <module>() 1 with open('FilePath/FileName.pkl', "rb") as file: ----> 2 file = pickle.load(file) /Users/manasa.bulusu/anaconda2/lib/python2.7/pickle.pyc in load(file) 1382 1383 def load(file): -> 1384 return Unpickler(file).load() 1385 1386 def loads(str): /Users/manasa.bulusu/anaconda2/lib/python2.7/pickle.pyc in load(self) 862 while 1: 863 key = read(1) --> 864 dispatch[key](self) 865 except _Stop, stopinst: 866 return stopinst.value /Users/manasa.bulusu/anaconda2/lib/python2.7/pickle.pyc in load_global(self) 1094 module = self.readline()[:-1] 1095 name = self.readline()[:-1] -> 1096 klass = self.find_class(module, name) 1097 self.append(klass) 1098 dispatch[GLOBAL] = load_global /Users/manasa.bulusu/anaconda2/lib/python2.7/pickle.pyc in find_class(self, module, name) 1128 def find_class(self, module, name): 1129 # Subclasses may override this -> 1130 __import__(module) 1131 mod = sys.modules[module] 1132 klass = getattr(mod, name) ImportError: No module named __builtin__
我导入了builtins(py3.6)和__builtin__(py2.7),但这并没有阻止抛出完全相同的错误。
这里的实际问题是什么?而且,__builtin__\r看起来甚至不像 py36 中的真正包。
这看起来像是您在 Windows(和 Python 2)上以文本模式编写的 pickle。使用文本模式不是一个好主意,因为\n->\r\n转换使得此类 pickles 在非 Windows 或 Python 3 上无法读取。
以二进制模式读取数据并在 ing.replace(b'\r\n', b'\n')之前调用loads可能允许您加载数据,就像在 Python 2 上的 Windows 上重新加载数据并以二进制模式重新pickle 一样。
| 归档时间: |
|
| 查看次数: |
5337 次 |
| 最近记录: |