• day13-1 Json & pickle 数据序列化


    json 序列化和反序列化

     1 import json
     2 
     3 info ={
     4        'age':22,
     5        'name':'Ri'
     6        }
     7 
     8 with open('test.txt','w',encoding = 'utf-8') as f:
     9     print(type(json.dumps(info)))
    10     f.write(json.dumps(info))
    11 
    12 #<class 'str'>
    序列化

    (使用str强制转换dict,反序列化时使用eval,可返回字典,不常用,不用记)

     1 import json
     2 
     3 with open('test.txt','r',encoding = 'utf-8') as f:
     4     data =json.loads(f.read())
     5 
     6 print(data)
     7 print(type(data))
     8 # =============================================================================
     9 # {'age': 22, 'name': 'Ri'}
    10 # <class 'dict'>
    11 # =============================================================================
    反序列化
     1 import json
     2 
     3 def func(name):
     4     print('hello,',name)
     5 
     6 info ={
     7        'age':22,
     8        'sex':'m',
     9        'func':func
    10        }
    11 
    12 f = open('test.txt','w',encoding = 'utf-8')
    13 
    14 f.write(json.dumps(info))
    15 f.close()
    16 
    17 # =============================================================================
    18 # TypeError: Object of type 'function' is not JSON serializable
    19 # =============================================================================
    json 只能处理简单的数据类型

    json 只能处理简单的数据类型,比如字典,列表。因为json主要负责不同语言间的交互。是所有语言通用的
    但是不同语言间的类以及特性,库存在很多差别,所以json只支持最简单的
    xml 正在逐渐的被json、取代。xml的作用与json的相同,但json的使用更加简单。至今很多传统的公司还在
    使用的接口还是xml

    pickle 可以处理python所有的数据类型

     1 import pickle
     2 
     3 def func(name):
     4     print('hello,',name)
     5 
     6 info ={
     7        'age':22,
     8        'sex':'m',
     9        'func':func
    10        }
    11 
    12 f = open('test.txt','wb')
    13 
    14 print(pickle.dumps(info))
    15 f.write(pickle.dumps(info))
    16 f.close()
    17 
    18 
    19 #b'x80x03}qx00(Xx03x00x00x00ageqx01Kx16Xx03x00x00
    20 #x00sexqx02Xx01x00x00x00mqx03Xx04x00x00x00funcq
    21 #x04c__main__
    func
    qx05u.'
    pickle
     1 import pickle
     2 
     3 f = open('test.txt','rb')
     4 
     5 data = pickle.loads(f.read())
     6 
     7 print(data)
     8 
     9 #runfile('C:/Users/Administrator/Ri/day5/Json.py', wdir='C:/Users/Administrator/Ri/day5')
    10 #b'x80x03}qx00(Xx03x00x00x00ageqx01Kx16Xx03x00x00x00sexqx02Xx01x00x00x00mqx03Xx04x00x00x00funcqx04c__main__
    func
    qx05u.'
    11 #
    12 #runfile('C:/Users/Administrator/Ri/day5/json1.py', wdir='C:/Users/Administrator/Ri/day5')
    13 #{'age': 22, 'sex': 'm', 'func': <function func at 0x00000000098D19D8>}
    14 #
    15 #data['func']('World')
    16 #hello, World
    pickle反

    可能是使用的编辑器的原因,序列化后程序结束,函数func 被释放,所以在反序列化是的添加函数。并且函数

    名如果一样,函数体不一样,会执行反序列化的函数

    pickle只有在python的本语言才能使用

     1 import pickle
     2 
     3 def func(name):
     4     print('hello,',name)
     5 
     6 info ={
     7        'age':22,
     8        'sex':'m',
     9        'func':func
    10        }
    11 
    12 f = open('test.txt','wb')
    13 
    14 pickle.dump(info,f)                                      #f.write(pickle.dumps(info))
    15 f.close()
    简单pickle 序列化
     1 import pickle
     2 
     3 def func(name):
     4     print('hello3141,',name)
     5 
     6 
     7 f = open('test.txt','rb')
     8 
     9 data = pickle.load(f)              #data = pickle.loads(f.read())
    10 
    11 print(data['func']('world2018!'))
    12 
    13 f.close()
    14 
    15 #hello3141, world2018!
    16 #None
    简单pickle反序列化

    只能dump或者load一次

    import json
    
    def func(name):
        print('hello,',name)
    
    info ={
           'age':22,
           'sex':'m',
           #'func':func
           }
    
    f = open('test.txt','w')
    
    info['age'] = 12
    
    f.write(json.dumps(info))  # 每次dump 会把之前的状态对冲掉
    
    
    f.close()
    dumps
    import json
    
    f = open('test.txt','r')
    
    data = json.loads(f.read())  # 只能locd一次
    print(data['age'])
    
    #
    #12
    loads
  • 相关阅读:
    排序算法最强总结及其代码实现
    程序员面试常问的小算法总结
    Docker部署Scrapy-redis分布式爬虫框架(整合Selenium+Headless Chrome网页渲染)
    使用亚马逊AWS云服务器进行深度学习——免环境配置/GPU支持/Keras/TensorFlow/OpenCV
    阿里巴巴MySQL开源中间件Canal入门
    【秒杀系统】秒杀系统实战(四)| 缓存与数据库双写一致性实战
    【秒杀系统】秒杀系统实战(五)| 如何优雅的完成订单异步处理
    把购买数据添加到购物车
    实现自动登陆和记住用户名功能
    自定义登陆标签
  • 原文地址:https://www.cnblogs.com/yfjly/p/9798298.html
Copyright © 2020-2023  润新知