【问题标题】:How can I get the data from a .pkl file using Windows OS如何使用 Windows 操作系统从 .pkl 文件中获取数据
【发布时间】:2018-04-30 13:52:58
【问题描述】:

我有一个 .pkl 文件,它可以在我的 MAC 操作系统中完美加载,但它不会在 Windows 机器中加载。我在 anaconda 上使用 python 3。 这是我的代码:

data=pickle.load(open("ydata1.pkl",'rb'))

错误:UnicodeDecodeError:“ascii”编解码器无法解码位置 2295 中的字节 0xc3:序数不在范围内 (128)

所以我尝试了这个:

data=pickle.load(open("ydata1.pkl",'r'))

但我收到一条错误消息:需要一个类似字节的对象,而不是 'str'

谁能告诉我哪里出错了?

【问题讨论】:

    标签: python python-3.x anaconda jupyter-notebook


    【解决方案1】:

    open() 与模式 rb 一起使用:

    import pickle
    
    with open('ydata1.pkl', 'rb') as p_f:
        data = pickle.load(p_f)
    

    取自文档:https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files

    在 Windows 上,附加到模式的 'b' 以二进制模式打开文件,所以 还有像“rb”、“wb”和“r+b”这样的模式。 Windows 上的 Python 区分文本文件和二进制文件;行尾 文本文件中的字符在数据时会自动稍微改变 被读或写。这种对文件数据的幕后修改 对 ASCII 文本文件很好,但它会破坏这样的二进制数据 在 JPEG 或 EXE 文件中。阅读时要非常小心使用二进制模式 并编写此类文件。在 Unix 上,将 'b' 附加到 模式,因此您可以独立于平台使用它来处理所有二进制文件 文件。

    还要确保您没有遇到 Python 2 / Python 3 pickle 兼容性问题:Pickle incompatibility of numpy arrays between Python 2 and 3

    【讨论】:

    • 有一个错字:data = pickle.load(p_f)
    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多