Python学习笔记-常用模块介绍--序列化与反序列化

1.序列化和反序列化是什么意思?

  • 存东西到硬盘,我们知道,python可以把字符串,当做数据传进去。
  • 那么python可以把字典,列表这些类型存进去吗?不可以。
  • 所以,需要把字典,列表等类型转换为字符串,再存进去,这个过就是序列化。
  • 举个栗子1--序列化: 

  •  

    dic = {"name":"liqi"}
    
    with open("a.txt",mode="wt",encoding="utf-8") as f:
        # f.write(dic)    # 这样写,会报错 TypeError: write() argument must be str, not dict
        f.write(str(dic))

     

  • 举个栗子2--反序列化:
  • with open("a.txt",mode="rt",encoding="utf-8") as f:
        res = f.read()
        print(res,type(res))
        # res_new = dict(res)   # 这样不可以转换
        # print(res_new, type(res_new))   # ValueError: dictionary update sequence element #0 has length 1; 2 is required
    
        res_new = eval(res) # eval是把字符串里的字符运行一下
        print(res_new, type(res_new)) # {'name': 'liqi'} <class 'dict'>

     

2.游戏里的存档是怎么是实现的?

  • 游戏就是程序
  • 程序=代码+数据
  • 代码是不变的,数据是变化的。
  • 所以,存档,存的就是数据。
    • 举个栗子:  
    • 植物大战僵尸,存档就是存的数据。原先有10个向日葵,后来有了20个,存档改变的就是数据。

3.序列化的应用场景?(其实就是保存数据的场景)

  • 游戏存档
  • VMware的挂起
  • 跨平台交互数据

4.如何跨平台交互数据?

  • 需求: 有1个大项目,用java开发了A模块,python开发了B模块,AB模块想要交互数据,是如何交互的?
  • 引入json格式,作为一个通用的数据格式。
  •  

     

  •  

     

     

     

 

5. josn格式和pickle格式有什么区别?

  • json
    • 优点:可以跨平台,语言间的共性类型都可以转换。
    • 缺点:比如python里的元组类型不支持
    • 应用场景:跨平台
    • 使用频率:高   (跨平台场景多)
  • pickle
    • 优点:python里的所有元素都支持
    • 缺点:只能python内部使用,不能跨平台。
    • 应用场景:python内部存档
    • 使用频率:低

 

6.json的基本使用。

  • json.dumps( python数据 )
    • 示例
    • dic = {'name':"liqi","bool":True,"list":[1,2.3]}
      dic_json = json.dumps(dic)
      print(dic_json,type(dic_json))
      # 结果  {"name": "liqi", "bool": true, "list": [1, 2.3]} <class 'str'>
    • 注意:json格式没有单引号,json里的布尔值为true 和 null

 

  • json.loads( json数据 )
    • 示例
    • # 反序列化
      with open("a.json",mode="rt",encoding="utf-8") as f:
          res = f.read()
          dic = json.loads(res)
      print(dic)  # {'name': 'liqi', 'bool': True, 'list': [1, 2.3]}

       

  •  

     

  • json.dump()  # 不加s
    • 示例
    • dic = {'name':"liqi","bool":True,"list":[1,2.3]}
      json.dump(dic,open("b.json",mode="wt",encoding="utf-8"))    # 可以一步到位,写入文件

       

  •  

     json.load()      # 不加s

    • 示例
    • res = json.load(open("b.json",mode="rt",encoding="utf-8"))
      print(res)

       

 

7.序列化后的结果,一定要写到文件了吗?

  • 不一定。
  • 把数据类型转换为json格式叫序列化。
  • 存不存进硬盘,都无所谓。跟序列化没关系。
  •  

     

8.pickle用法。

  • 跟json差不多
  • 示例:
  • import pickle
    
    res = pickle.dumps({1,2,3,4})
    # print(res)  # b'\x80\x04\x95\r\x00\x00\x00\x00\x00\x00\x00\x8f\x94(K\x01K\x02K\x03K\x04\x90.'
    pickle.dump({1,2,3},open("c",mode="wb"))

     

  • 示例:
  • s = pickle.load(open("c",mode="rb"))
    print(s,type(s))    # {1, 2, 3} <class 'set'>

     

  • 参考:https://www.cnblogs.com/linhaifeng/articles/6384466.html#_label6

 

 

 

 

 

 

 

 

 

 

 

 

 

参考资料:https://www.cnblogs.com/linhaifeng/articles/6384466.html

posted @ 2023-01-11 12:20  o蹲蹲o  阅读(83)  评论(0编辑  收藏  举报