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

    把对象(变量)从内存中变成可存储或传输的过程称为序列化

    1.json模块

      如果要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,如果有序列化为JSON表示出来的就是一个字符串,可以被所有语言读取,也可以方便的存储到磁盘或者通过网络传输

    JSON和Python内置的数据类型对应如下:

    JSON类型 Python类型
    {} dict
    [] list
    "string" str
    123.45 int或float
    True/False True/False
    null None
     1 import json
     2 dic = {"name":"abc","age":18}
     3 print(type(dic))#<class 'dict'>
     4 
     5 j = json.dumps(dic)
     6 print(type(j))#<class 'str'>
     7 
     8 f = open("序列化对象",'w')
     9 f.write(j)#等价于json.dump(dic,f)
    10 f.close()
    11 
    12 #反序列化
    13 f = open("序列化对象")
    14 data = json.loads(f.read())#等价于data = json.load(f)

      1.

    1 import json
    2 dic = {1:"value1",2:"value2"}
    3 ret = json.dumps(dic)
    4 res = json.loads(ret)
    5 print(dic,type(dic))#{1:'value1',2:'value2'}<class 'dict'>
    6 print(ret,type(ret))#{"1":"value1","2":"value2"}<class 'str'>
    7 print(res,type(res))#{'1':'value1','2':'value2'}<class 'dict'>

      2.

    1 import json
    2 dic = {1 : [1,2,3],2 : (4,5,'aa')}
    3 ret = json.dumps(dic)
    4 print(dic,type(dic))#{1:[1,2,3],2:(4,5,'aa')}<class 'dict'>
    5 print(ret,type(ret))#{"1":[1,2,3],"2":[4,5,"aa"]}<class 'str'>

    如果字典的值为元组,序列化后会转为列表

      3.

    1 import json
    2 s = {1,2,3}
    3 s1 = json.dumps(s)
    4 print(s1)
    5 #会报错TypeError: Object of type set is not JSON serializable
    6 集合类型不是可序列化的对象

      4.

    1 import json
    2 dic = {(1,2,3):123}
    3 dic1 = json.dumps(dic)
    4 print(dic1)
    会报错

    TypeError: keys must be str, int, float, bool or None, not tuple

    字典的键必须是str,int,float,bool或None,元组不能作为键

      5.

    1 import json
    2 dic = {"key1":"value1","key2":"value2"}
    3 with open("json_file","a") as f:
    4     json.dump(dic,f)
    5     json.dump(dic,f)
    6 
    7 with open("json_file","r") as f:
    8     dic = json.load(f)
    不支持连续的存取

    dumps和loads

      在内存中做数据转换:

        dumps  数据类型转成字符串  #序列化

        loads   字符串转成数据类型  #反序列化

    dump和load

      直接将数据类型写入文件,直接从文件中读出数据类型

        dump  数据类型写入文件  #序列化

        load  从文件读出数据类型  #反序列化

    2.pickle模块

      1.支持在python中几乎所有的数据类型

      2.dumps序列化的结果只能是字节

      3.只能在python中使用

      4.在和文件操作的时候,需要用rb,wb的模式打开文件

      5.可以多次dump和load

     

  • 相关阅读:
    mysql之优化器、执行计划、简单优化
    一条查询sql的执行流程和底层原理
    mysql建立索引,实际工作中建立索引的示例
    explain命令---查看mysql执行计划
    mysql 一些知识点
    开发中一些快捷键的使用
    simple-rpc
    maven
    数组合并排序
    SpringMVC配制全局的日期格式
  • 原文地址:https://www.cnblogs.com/s593941/p/9520554.html
Copyright © 2011-2022 走看看