我有一个简单的类,我正在腌制(转储)到一个文件。在OS X上运行正常,在Windows上运行正常。
然而,在Windows上,我可以正常加载/取消对象 - 当窗口然后将这个文件腌制并将其保存回磁盘时,它在OS X上变得不可读(尽管在Windows中它仍然表现正常)。
我从OS X返回的错误是它无法导入require类。
我很困惑,因为只要我不在窗户中腌制任何东西,这一切都可以正常工作! (即便如此,它在Windows中仍能正常工作)
我听说它可能是行结尾,我的其他想法可能与使用的操作系统不同的编码类型有关?但我真的不知道该尝试什么来完全诊断和/或解决这个问题,所以任何帮助都将不胜感激!
答案 0 :(得分:5)
使用最新协议版本的Pickle并在所有情况下以二进制模式打开文件。这应该可以解决问题。
答案 1 :(得分:3)
它将是行结尾 - 如果你在ascii模式'r'或'w'中使用ASCII pickle打开文件 - 如果你在二进制模式'rb''wb'中使用二进制pickle打开。来自docstring:
默认值 协议为0,向后兼容。 (协议0是 只能写入文本中打开的文件的协议 模式并成功回读。使用更高的协议时 小于0,确保文件以二进制模式打开,两者都是 酸洗和去除。)