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

    前言

    序列化?TCP/IP协议只支持字节数组的传输,不能直接传我们平时用到的一组数据对象。对象序列化的结果一定是字节数组!

    当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。所以在Python中就有丰富的序列化模块。

    一、json 序列化模块

    json是一种轻量级的数据交换格式,就好像中国地方语言有很多,你可能听不懂,但是只要我们都懂得中文国语那一定能一起沟通了。

    • 通用的序列化格式,平时也是常见的一种数据结构;
    • python中只有部分数据类型能够进行序列化转换成字符串;

    1.dumps序列化 和 loads反序列化:

    # 1.dumps序列化 和 loads反序列化
    import json
    dic = {'k': 'v'}
    print(dic, '序列化前的类型:', type(dic))
    ret_str = json.dumps(dic)
    print(ret_str, '序列化后的类型:', type(ret_str))
    ret_dic = json.loads(ret_str)
    print(ret_dic, '反序列化后:', type(ret_dic))
    # 序列化的类型有:str、int、list、dict、tuple

     2、dump 和 load 对一个对象进行序列化和反序列化

    # 2、dump 和 load 对一个对象进行序列化和反序列化
    import json
    dic = {'k': '中国'}
    with open('fff', 'w', encoding='utf-8')as f:
        json.dump(dic, f, ensure_ascii=False)
    with open('fff', encoding='utf-8')as f:
        print(json.load(f))

     如果不设置 ensure_ascii=False ,我们的fff文件将以Unicode编码写入:{"k": "u4e2du56fd"}

    3、使用 dumps 换行写入文件 loads 一行一行读:

    # 3、使用 dumps 换行写入文件:
    import json
    dic = [{'k1': 1}, {'k2': 2}, {'k3': 3}]
    f = open('test', 'w')
    for i in dic:
        str_dic = json.dumps(i)
        print(type(str_dic), str_dic)
        f.write(str_dic+'
    ')
    f.close()
    
    # loads 一行一行读
    lis = []
    f = open('test')
    for i in f:
        dic = json.loads(i)
        print(type(dic), dic)
        lis.append(dic)
    print(lis)

    二、pickle 序列化模块

    1、和json拥有的方法相同。

    • Python中的所有数据类型都支持,与文件需要加b,如rb、wb
    • 支持分次dumps和loads

    dumps和loads:

    # 什么数据类型都可以,与文件需要加b,如rb、wb
    # 支持分次dumps和loads
    # dumps和loads:
    import pickle
    dic = [{'k1': 1}, {'k2': 2}, {'k3': 3}]
    str_dic = pickle.dumps(dic)
    print(str_dic)
    dic1 = pickle.loads(str_dic)
    print(dic1)

    三、shelve 序列化模块

    1、只提供一个open方法,序列化句柄
    2、使用句柄操作,非常方便

    import shelve
    f = shelve.open('test')
    f['k'] = {'k': '广深小龙'}
    f.close()
    
    f1 = shelve.open('test', writeback=True)     # writeback=True会记录所操作的增删改
    dic = f1['k']
    print(type(dic), dic)
    f1.close()

     shelve就好像在Python中操作dict数据类型一样,shelve序列化会生成三个文件:

    等等还有其他如:messagepack

    欢迎来大家QQ交流群一起学习:482713805

  • 相关阅读:
    HDOJ1269 迷宫城堡
    最长公共子序列 nyoj36
    HDU1081 To The Max 求子矩阵最大和
    nyoj20 吝啬的国度
    景观分析工具:arcgis中patch analysis模块
    景观格局动态变化分析方法(基于ArcGIS、Fragstats、ENVI、ERDAS、Patch Analysis for ArcGIS) (20110315 08:07:03)
    从C#到Python —— 谈谈我学习Python一周来的体会
    如何判定多边形是顺时针还是逆时针
    超新星与暗能量的发现--今年诺贝尔物理奖工作的介绍(转)
    怎样把扫描好的身份证打印出实际大小
  • 原文地址:https://www.cnblogs.com/gsxl/p/12488768.html
Copyright © 2011-2022 走看看