zoukankan      html  css  js  c++  java
  • python3模块: json & pickle

    概念:

    序列化(Serialization):

    • 将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等。反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象。

    • JSON(Java Script Object Notation):一种轻量级数据交互格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,Json是JavaScript中的一个子集。

    • python2.6版本开始加入了JSON模块,python的json模块序列化与反序列化的过程分别是encoding和decoding。

      encoding:把一个python对象编码转换成Json字符串。

      decoding:把json格式字符串编码转换成python对象。

    用于序列化的两个模块

    • json:用于字符串和Python数据类型间进行转换
    • pickle: 用于python特有的类型和python的数据类型间进行转换
    • json提供四个功能:dumps,dump,loads,load
    • pickle提供四个功能:dumps,dump,loads,load
      具体应用:

    json提供四个功能:dumps, dump, loads, load

    1 # dumps功能
    2 # 将数据通过特殊的形式转换为所有程序语言都认识的字符串
    3 >>> import json
    4 >>> data = ['aa', 'bb', 'cc']
    5 >>> j_str = json.dumps(data)
    6 >>> j_str
    7 '["aa", "bb", "cc"]'
    
    1 # loads功能
    2 # 将json编码的字符串再转换为python的数据结构
    3 >>> j_str
    4 '["aa", "bb", "cc"]'
    5 >>> mes = json.loads(j_str)
    6 >>> mes
    7 ['aa', 'bb', 'cc']
    
    1 # dump功能
    2 # 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件
    3 with open('D:/tmp.json', 'w') as f:
    4     json.dump(data, f)
    1 # load功能
    2 # 从数据文件中读取数据,并将json编码的字符串转换为python的数据结构
    3 with open('D:/tmp.json', 'r') as f:
    4     data = json.load(f)
    

    说明:

      json编码支持的基本类型有:None, bool, int, float, string, list, tuple, dict.

      对于字典,json会假设key是字符串(字典中的任何非字符串key都会在编码时转换为字符串),要符合JSON规范,应该只对python列表和字典进行编码。此外,在WEB应用中,把最顶层对象定义为字典是一种标准做法。

      json编码的格式几乎和python语法一致,略有不同的是:True会被映射为true,False会被映射为false,None会被映射为null,元组()会被映射为列表[],因为其他语言没有元组的概念,只有数组,也就是列表。
     

    1 >>> import json
    2 >>> data = {'a':True, 'b':False, 'c':None, 'd':(1,2), 1:'abc'}
    3 >>> j_str = json.dumps(data)
    4 >>> j_str
    5 '{"a": true, "c": null, "d": [1, 2], "b": false, "1": "abc"}'
    

    pickle可以存储什么类型的数据呢?

    1. 所有python支持的原生类型:布尔值,整数,浮点数,复数,字符串,字节,None。
    2. 由任何原生类型组成的列表,元组,字典和集合。
    3. 函数,类,类的实例

    pickle应用:

    1 # dumps功能
    2 import pickle
    3 data = ['aa', 'bb', 'cc']  
    4 # dumps 将数据通过特殊的形式转换为只有python语言认识的字符串
    5 p_str = pickle.dumps(data)
    6 print(p_str)            
    b'x80x03]qx00(Xx02x00x00x00aaqx01Xx02x00x00x00bbqx02Xx02x00x00x00ccqx03e.         
    b'x80x03]qx00(Xx02x00x00x00aaqx01Xx02x00x00x00bbqx02Xx02x00x00x00ccqx03e.
    
    1 # loads功能
    2 # loads  将pickle数据转换为python的数据结构
    3 mes = pickle.loads(p_str)
    4 print(mes)
    5 ['aa', 'bb', 'cc']
    
    1 # dump功能
    2 # dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
    3 with open('D:/tmp.pk', 'w') as f:
    4     pickle.dump(data, f)
    1 # load功能
    2 # load 从数据文件中读取数据,并转换为python的数据结构
    3 with open('D:/tmp.pk', 'r') as f:
    4     data = pickle.load(f)
    
  • 相关阅读:
    JVM活学活用——GC算法 垃圾收集器
    JVM活学活用——类加载机制
    JVM活学活用——Jvm内存结构
    优化springboot
    Java基础巩固计划
    Java自定义注解
    记一次内存溢出的分析经历
    redis学习笔记-redis的安装
    记一次线程池调优经历
    Python中关于split和splitext的差别和运用
  • 原文地址:https://www.cnblogs.com/guigujun/p/7614282.html
Copyright © 2011-2022 走看看