zoukankan      html  css  js  c++  java
  • Python 序列化与反序列化

    很多程序都需要用户输入某种信息,如让用户存储游戏首页项或者提供可视化的数据。不管是专注什么,程序员都会把用户提供的信息存储在列表和字典等数据结构中。用户关闭程序时,你几乎总是要保存他们提供的信息:一种简单的方式就是使用.json来存储数据。

    json模块让你能够将简单的python数据结构转存到文件中,并在程序再次运行时加载该文件中的数据。

    你还可以使用json在python程序之间分享数据。

    更为重要的是,Json数据格式并非python专用,这让你能够将json格式存储的数据与使用其他编程语言的人分享,或其他编程语言调用。

    Json:(JavaScript Object Notation)格式最初是为javascript开发的,但后来成了一种常见的格式,包括python在内的众多语言采纳。

    1.  使用json.dump()和json.load()

    #Author:Anliu
    import json
    number = [2,3,4,5,67,8,9]
    
    filename = "numbers.json"
    with open("filename","w") as f_obj:
        json.dump(number,f_obj)

    我们看存到文件的数据表格式和我们在python中的是一样的。

    [2, 3, 4, 5, 67, 8, 9]

    在编写下一个程序。使用json.load()将这个列表读取到内存中。

    #Author:Anliu
    import json
    filename = "numbers.json"
    with open("filename","r") as f_obj:
        numbers = json.load(f_obj)
    print(numbers)

    同样可以读取到列表。这样在程序之间实现了数据共享。

    2. 序列化和反序列化的定义

    • 序列化:就是把不可传输的对象转换为可存储或可传输的过程
    • 反序列化:就是把在磁盘,等介质中的数据转换为对象

    python中序列化通常有两种方式:pickle模块和json模块

    2.1 pickle模块的使用


    对于大多数应用程序来讲,dump()和load()函数的使用就是你使用pickle模块所需的全部了。
    dumps(object)和dump(object) :序列化
    loads(bytes)和load(bytes):反序列化
    两者不同的是不带s的是(反)序列化关于二进制文件中,带s是(反)关于序列化对象

    #Author:Anliu
    import pickle
    dict = {"hostname":"zabbix",
            "IP":"192.168.42.111"
            }
    print(dict,type(dict))
    #with open("file_p","wb") as f:
    m = pickle.dumps(dict)
    print(m,type(m))
    n = pickle.loads(m)
    print(n,type(n))

    pickle.dump和pickle.load的使用:序列和反序列化到文件中的

    #Author:Anliu
    import pickle
    dict = {"hostname":"zabbix",
            "IP":"192.168.42.111"
            }
    print(dict,type(dict))
    with open("test_p1","wb") as f1:
        m = pickle.dump(dict,f1)
    
    with open('test_p1',"rb") as f2:
        n = pickle.load(f2)
        print(n,type(n))

    序列化函数:

    #Author:Anliu
    import pickle
    def logging():
        print("This is a test of logging")
    
    m = pickle.dumps(logging)
    print(m,type(m))
    
    n = pickle.loads(m)
    print(n,type(n))
    n()


    2.2 json模块的使用

    方法不带s的是file文件中使用的
    json.dumps 从字典(可序列化json的对象)转换为json格式数据
    json.loads 从json到字典
    json.dump
    json.load
    default:就是把任意一个对象变成一个可序列为JSON的对象
    intent:格式化好看点

    #Author:Anliu
    import json
    dict = {"hostname":"zabbix",
            "IP":"192.168.42.111"
            }
    
    print(dict,type(dict))
    #with open("test_j1","w") as f:
    m = json.dumps(dict,indent=4)
    print(m,type(m))
    
    n = json.loads(m)
    print(n,type(n))
    
    输出结果:
    {'hostname': 'zabbix', 'IP': '192.168.42.111'} <class 'dict'>
    {
        "hostname": "zabbix",
        "IP": "192.168.42.111"
    } <class 'str'>
    {'hostname': 'zabbix', 'IP': '192.168.42.111'} <class 'dict'>


    序列化可调运的数据类型:

    #Author:Anliu
    import json
    class Ball:
        def __init__(self, color):
            self.color = color
    
    ball = Ball("red")
    
    def ball2idict(bal):
        return {
            "color": bal.color
        }
    
    def dict2ball(odict):
        return Ball(odict["color"])
    
    objdumps = json.dumps(ball, default=ball2idict)
    objloads = json.loads(objdumps, object_hook=dict2ball)
    print(objdumps)
    print(objloads)


  • 相关阅读:
    量子计算机算法与应用研究论文(转载务必注明出处)
    [置顶] html学习笔记,锚点,超链接,table布局,表头,h,sub,blockquote,ul,li,ol.dl,加入收藏,打印,弹出窗口
    [置顶] 第一天初试linux
    [置顶] Datalist嵌套datalist,页面传值,加密,数据绑定
    [置顶] asp.net(c#)中相对路径(虚拟路径)和物理磁盘路径的转换
    [置顶] c#对于文件的操作
    [置顶] 读取pdf并且在web页面中显示
    [置顶] gridview中嵌套gridview(并实现子gridview的数据绑定),页面传值,加密,数据绑定
    git的使用学习笔记--项目版本操作
    git的使用学习笔记---合并分支
  • 原文地址:https://www.cnblogs.com/anttech/p/12650405.html
Copyright © 2011-2022 走看看