序列化和反序序列化

一:什么是 序列化与反序列化

     1,什么是序列化:序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络传输

     2,反序列化:就是将硬盘或者网络中传过来的一种数据格式转换成内存中的数据结构

二:为什么要有序列化和反序列化

        1,可以保存程序的运行状态

         2,数据的跨平台交互

三:  怎么用

         json

               优点:

                       跨平台性强

               缺点:只能支持/对应部分python部分的数据类型

              注意点:# json格式不能识别单引号,全都是双引号

         pickle

          优点: 可以支持/对应python的所有数据类型

           缺点:只能被python识别,不能跨平台

四:json和pickle实例

      1,用json实现序列化

         import  json

          dic={'name':'egon','age':18}

           ##序列化

          res=json.dumps(dic)

          ###写入文件

          with open ('aa.txt','wt',encoding='utf-8')as f:

                       f.write(res)

           #1和2可以合作一步
           # with open('db.pkl','wb') as f:
           #     json.dump(dic,f)

        2.用json实现反序列化

         import json

         #从文件中读取json格式

         with open(‘aa.txt','rt',encofing='utf-8')as f:

                      res=f.read()

         ####将json格式转成内存中的数据类型

                     json.loads(res)

         #1和2可以合作一步
         # with open('db.pkl','rb') as f:
         #     dic=json.load(f)

         ####同理,pickle模块也是这样是使用

        3,用pickle实现序列化

          import pickle
          dic={'a':1,'b':2,'c':3}
          # #1 序列化
          # pkl=pickle.dumps(dic)
          # # print(pkl,type(pkl))
          # #2 写入文件
          # with open('db.pkl','wb') as f:
          #     f.write(pkl)

          #1和2可以合作一步
          # with open('db.pkl','wb') as f:

          #     pickle.dump(dic,f)

           4 pickle模块实现反序列化

            import pickle
            # # #1、从文件中读取pickle格式
            # with open('db.pkl','rb') as f:
            #     pkl=f.read()
            # #2、将json_str转成内存中的数据类型
            # dic=pickle.loads(pkl)
            # print(dic['a'])
            #1和2可以合作一步
            # with open('db.pkl','rb') as f:
            #     dic=pickle.load(f)
            # print(dic['a'])

五:eval 在有些情况下也可以被用来做反序列化的工作,不过不建议使用。

       因为eval本质上只是把字符串里面的表达式拿出来运行一下,当涉及到python中数据类型的关键字时,并不能成功的反序列化。

l例如:

当json文件中存储的数据是[ 1  ,   true  ,  null   ]

# 用json反序列化

# with open('db.json','rt',encoding='utf-8') as f:
#     l=json.load(f)
#     print(l)

# 用eval反列化
# with open('db.json','rt',encoding='utf-8') as f:
#     s=f.read() #s ='[1, true, null]'
#     dic=eval(s) #eval('[1, true, null]')#这样会报错,因为python会认为true是一个变量名字而没有定义
#     print(dic['name'])

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值