zoukankan      html  css  js  c++  java
  • 序列化 pickle & json & shelve

    把内存数据转成字符,叫序列化,dump,dumps

    把字符转成内存数据类型,叫反序列化load,loads

    dumps:仅转成字符串

    dump不仅能把对象转换成str,还能直接存到文件内

    json.dumps   json.loads

    1.把你的内存数据,通过网络,共享给远程其他人

    2.定义了不同语言之间的交互规则

      a.纯文本,缺点:不能共享复杂的数据类型,比如字典

      b.xml ,缺点:占空间大

      c.json,优点,简单,可读性好

    • json:
      • 支持的数据类型:str,int,tuple,list,dict
      • 跨平台,跨语言,体积小
    • pickle:
      • 支持python所有的数据类型
      • 只能在python中使用,存储数据占空间大
      • dumps 转换为bytes,写到硬盘后是pickle自己的格式,不可直接读,看着像是乱码,其实不是
    • json序列化时是将数据转成字符串形式
    • pickle序列化时是将数据转成字节形式,在读写文件时必须是以二进制的方式进行读写,‘rb’,‘wb’
    •  1 import json,pickle
       2 data = {'a':1,'b':2}
       3 pickle_dumps_data = pickle.dumps(data)
       4 print(type(pickle_dumps_data),pickle_dumps_data)
       5 #<class 'bytes'>
       6 # b'x80x03}qx00(Xx01x00x00x00aqx01Kx01Xx01x00x00x00bqx02Kx02u.'
       7 pickle_loads_data = pickle.loads(pickle_dumps_data)
       8 print(type(pickle_loads_data),pickle_loads_data)
       9 #<class 'dict'> {'a': 1, 'b': 2}
      10 json_dumps_data = json.dumps(data)
      11 print(type(json_dumps_data),json_dumps_data)
      12 # <class 'str'>{"a": 1, "b": 2}
      13 json_loads_data = json.loads(json_dumps_data)
      14 print(type(json_loads_data),json_loads_data)
      15 # <class 'dict'> {'a': 1, 'b': 2}
      View Code

    shelve  对pickle进行封装,可进行多次dump,load,只能在python中使用,以k_v结构写入文档,每次dump都要写K

     1 import shelve
     2 f = shelve.open("shelve_test")
     3 names = ["alex","rain","test"]
     4 info = {"names":"alex","age":22}
     5 f["names"] = names
     6 f["info_dic"] = info
     7 f.close()
     8 #获取数据
     9 # f = shelve.open("shelve_test")
    10 # print(list(f.keys()))#['names', 'info_dic']
    11 # print(list(f.items()))#[('names', ['alex', 'rain', 'test']), ('info_dic', {'names': 'alex', 'age': 22})]
    12 # print(f.get("names"))#['alex', 'rain', 'test']
    13 # print(f.get("info_dic"))#{'names': 'alex', 'age': 22}
    14 #修改数据,重新给K复制
    15 # f = shelve.open("shelve_test")
    16 # f["names"] = ["Alex","Rain","Test"]
    17 # f.close()
    18 # f = shelve.open("shelve_test")
    19 # print(f.get("names"))#['Alex', 'Rain', 'Test']
    20 #删除数据
    21 # f = shelve.open("shelve_test")
    22 # del f["info_dic"]
    23 # f.close()
    24 # f = shelve.open("shelve_test")
    25 # print(f.get("info_dic"))#None
    26 
    27 #添加数据
    28 # f = shelve.open("shelve_test")
    29 # f["scores"] = [1,2,3,4,5]
    30 # f.close()
    31 # f = shelve.open("shelve_test")
    32 # print(f.get("scores"))#[1, 2, 3, 4, 5]
    View Code
  • 相关阅读:
    类的继承
    面向对象的编程
    Python的模块
    ES6_12_Set和Map数据结构以及for of循环
    ES6_11_字符串、数值、数组、对象扩展
    ES6_09_Generator函数
    ES6_08_Iterator遍历器
    ES6_07_Symbol属性
    ES6_05_三点运算符和形参默认值
    Sqlstate解释
  • 原文地址:https://www.cnblogs.com/GraceZ/p/7922745.html
Copyright © 2011-2022 走看看