zoukankan      html  css  js  c++  java
  • pickle模块的使用python3

    Python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

    python2使用的是cPickle模块,而在python3中cPickle已经被取消,取而代之的是pickle模块。

    开发过程中,我曾经遇到一个奇怪的问题,在读取一个文件时候,使用python2的如下方式:

    import cPickle
    train, test, dicts = cPickle.load(open("./dataset/atis.pkl"))

    是可以正常读取文件的。 
    可是当换做python3的方式读取文件时候,如下:

    import pickle
    
    train, test, dicts = pickle.load(open("./dataset/atis.pkl"))

    却获得了错误提示,提示信息如下:

    Traceback (most recent call last): 
    File “Main.py”, line 4, in 
    train, test, dicts = pickle.load(open(“./dataset/atis.pkl”)) 
    TypeError: ‘str’ does not support the buffer interface

    查询错误信息后得知解决办法 链接,应该指明用二进制方式打开文件,于是代码改为:

    import pickle
    train, test, dicts = pickle.load(open("./dataset/atis.pkl",  "rb"))

    可是这时候错误变成了:

    Traceback (most recent call last): 
    File “Main.py”, line 4, in 
    train, test, dicts = pickle.load(open(“./dataset/atis.pkl”, “rb”)) 
    UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe8 in position 0: ordinal not in range(128)

    于是再次求助万能的google,终于找到了解决办法 链接,我们需要告诉pickle:how to convert python bytestring data to Python 3 strings,The default is to try and decode all string data as ASCII,所以代码改为:

    import pickle
    train, test, dicts = pickle.load(open("./dataset/atis.pkl",  "rb"),  encoding='iso-8859-1')

    问题终于的到了解决。

    本文为原创文章:http://blog.csdn.net/programmer_wei/article/details/50994318

  • 相关阅读:
    cve-2015-1635 poc
    Python实现ORM
    Android完全退出应用的方法
    Java反射理解
    Android动画
    Android进程间通信IPC
    Java的四种引用方式
    Android底部菜单的实现
    Android中AsyncTask使用
    Android自定义控件
  • 原文地址:https://www.cnblogs.com/onemorepoint/p/7095396.html
Copyright © 2011-2022 走看看