zoukankan      html  css  js  c++  java
  • 序列化pickle模块

    1.pickle模块

    pickle.dumps() 和pickle.loads()

    import pickle
    
    f = open('112.pkl','w')
    a = {'name':2,2:3,3:4,4:5}
    print(pickle.dumps(a),type(pickle.dumps(a)))
    
    import pickle
    
    
    a = {'name':2,2:3,3:4,4:5}
    
    b = pickle.dumps(a)
    print(pickle.loads(b))
    

    pickle.dump() 和pickle.load() 这里和json的区别在于pickle直接转换成字节(bytes),json直接转换成字符串。pickle应用wb,rb这些打开二进制文件。  

    import pickle
    
    f = open('112.pkl','wb')
    a = {'name':2,2:3,3:4,4:5}
    
    b = pickle.dump(a,f)
    
    print(b,type(b))
    import pickle
    
    f = open('112.pkl','rb')
    
    b = pickle.load(f)
    
    print(b)
    

      

    2.那么json和pickle这么相似,到底为什么还要存在两个类型差不多的模块?

    ①·因为json模块只能用于str,dict,tuple,list,int.只能将这些数据类型转换成字符串。

     而pickle可以将所有的数据类型转换为字符串,包括函数(下面有举例)

    ②·但是json模块可以用于跨语言传递字符串,而pickle只能在python里使用,语言局限性大。

    用json转换函数,报错函数不可序列化。

    import pickle,json
    
    def sayhi():
        print("hello world")
    
    f = open('113.json','w')
    
    a = json.dump(sayhi,f)
    
    # TypeError: Object of type 'function' is not JSON serializable
    

    用pickle转换函数,不会报错

    import pickle,json
    
    def sayhi():
        print("hello world")
    
    f = open('113.json','wb')
    
    a = pickle.dump(sayhi,f)
    

      

      

      

      

  • 相关阅读:
    svn使用教程
    事务的隔离级别--全网最详细
    idea的java类图标C不见,取而代之是J标识,且写代码无提示
    text .global_start 和_start
    transformClassesWithDexForDebug
    RxJava基本流程和lift源码分析
    Rxlifecycle(三):坑
    Rxlifecycle(二):源码解析
    RxJava操作符之Share, Publish, Refcount
    Rxlifecycle(一):使用
  • 原文地址:https://www.cnblogs.com/Roc-Atlantis/p/8862360.html
Copyright © 2011-2022 走看看