zoukankan      html  css  js  c++  java
  • 建议44:理解模块pickle优劣

    # -*-  coding:utf-8 -*-
    '''
    pickle 估计是最通用的序列化模块了,它还有个C 语言的实现cPickle,相比pickle 来说
    具有较好的性能,其速度大概是pickle 的1000 倍,因此在大多数应用程序中应该优先使用
    cPickle(注:cPickle 除了不能被继承之外,它们两者的使用基本上区别不大,除有特殊情况,
    本节将不再做具体区分)。pickle 中最主要的两个函数对为dump() 和load(),分别用来进行对
    象的序列化和反序列化。
    
    ‰pickle.dump(obj, file[, protocol]) :序列化数据到一个文件描述符(一个打开的文件、
    套接字等)。参数obj 表示需要序列化的对象,包括布尔、数字、字符串、字节数组、
    None、列表、元组、字典和集合等基本数据类型,此外picike 还能够处理循环,递归
    引用对象、类、函数以及类的实例等。参数file 支持write() 方法的文件句柄,可以为
    真实的文件,也可以是StringIO 对象等。protocol 为序列化使用的协议版本,0 表示
    ASCII 协议,所序列化的对象使用可打印的ASCII 码表示;1 表示老式的二进制协议;
    2 表示2.3 版本引入的新二进制协议,比以前的更高效。其中协议0 和1 兼容老版本
    的Python。protocol 默认值为0。
    
    ‰load(file):表示把文件中的对象恢复为原来的对象,这个过程也被称为反序列化。
      来看一下load() 和dump() 的示例。
    
    '''
    import cPickle as pickle
    my_data = {"name" : "Python", "type" : "Language", "version" : "2.7.5"}
    fp = open("picklefile.dat", "wb")  # 打开要写入的文件
    pickle.dump(my_data, fp)           # 使用dump 进行序列化
    fp.close()
    
    fp = open("picklefile.dat", "rb")
    out = pickle.load(fp) # 反序列化
    
    fp.close()
    
    #通用做法如下
    with open("picklefile.dat", "rb") as fp:
        try:
            lastfileList = pickle.load(fp)
        except EOFError:
            print "Load (filename) was failed"%{'filename':'picklefile.dat'}
  • 相关阅读:
    [JavaScript] cookie和storage
    react-interview-02
    简单实现一个Vue
    js获取当前页面url
    鸽巢原理
    20210412-1 原型设计作业
    案例分析作业
    软件工程的202103226-1编程作业
    阅读反馈
    软件工程第一课
  • 原文地址:https://www.cnblogs.com/tychyg/p/4935949.html
Copyright © 2011-2022 走看看