• python序列化对象和反序列化


    1.首先不管哪种语言都会用到序列化和反序列化的过程,

    2.序列化:把对象转换为字节序列的过程称为对象的序列化;   反序列化:把对象转换为字节序列的过程称为对象的序列化。

    3.序列化的作用:把对象(变量)从内存中变成可存储或传输的二进制对象,序列化之后的内容就可以写入磁盘,或者通过网络传输到别的机器上,同理,反序列化实现,把变量内容从序列化的对象重新读取到内存

    4.如何实现序列化?比如我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,例如xml,json。

    json是标准的JavaScript语言的对象,其实就是字符串,可以被所有语言读取,也可以方便的存储到磁盘或者网络传输。

    5.JSON和Python的关系?两者内置的数据类型对应关系如下

    6.在python中json只能转换一部分对象。类,函数无法转换,就要用到pickle,但pickle只适用在python内部适用,shelve模块也是python内部使用

     举例说明

    1.想要把一个列表写进文件

    import json
    
    mq=[1,'e','r','m',4]
    
    with open('json_te','w') as fm:
        json.dump(mq,fm)
    如下,不调用dumps序列化,则直接报错,write()的参数必须是str类型
    import json
    mq=[1,'e','r','m',4]
    #mq=json.dumps(mq)
    
    with open('json_te','w') as fm:
        fm.write(mq)
    
    #TypeError: write() argument must be str, not list
    
    

    修改以上代码:执行成功

    import json
    mq=[1,'e','r','m',4]
    mq=json.dumps(mq)
    
    with open('json_te','w') as fm:
        fm.write(mq)

    2.以上代码还可以用dump替代,体现了dump和dumps之间的区别

    import json
    
    mq=[1,'e','r','m',4]
    
    with open('json_te','w') as fm:
        json.dump(mq,fm)

    3.对于从文件中读取该列表就体现了,反序列化的过程,如下过程,直接读取出来的是str,程序把文件内容作为一个长的字符串

    import json 
    
    with open ('json_te','r') as fn:
        con=fn.read()
        
    print(type(con)) #<class 'str'>
    print(con[2])   #'

    4.以下对比,反序列化处理的结果

    import json 
    
    with open ('json_te','r') as fn:
        con=fn.read()
    
    con=json.loads(con)   
    print(type(con))     #<class 'list'>
    print(con[2])     # r

    5.反序列化的另一种表达方式

    import json 
    with open ('json_te','r') as fn:
        con=json.load(fn)
    print(type(con))     #<class 'list'>

    6.json的dumps和loads,不能处理像函数/类,这就需要用到pickle

    import json
    
    def addmd(a,b):
        return int(a)+int(b)
    
    with open('pick_te','w') as fa:
        json.dump(fa,addmd)
    
    #TypeError: <_io.TextIOWrapper name='pick_te' mode='w' encoding='cp936'> is not JSON serializable

    对比以下用pickle实现

    import pickle
    
    def addmd():
        return 1+1
    addmd=pickle.dumps(addmd)
    with open('pick_te','wb') as fa:
        fa.write(addmd

    7.还有一个shelve模块,只有包含一个open函数,返回像字典一样的对象,直接实现文件中内容的修改添加,比JSON方便但是其他语言不通用。

    import shelve
    md=shelve.open('dict_t')
    md['name']='xiaohong '
    print(md['name'])      #xiaohong 
    
    
  • 相关阅读:
    与DSP通信时,RD&WR信号
    4.2.1 Vector bit-select and part-select addressing
    数据校验
    数据结构 (树,图)
    ASOP编译说明
    os
    20180203-增与查
    yum安装MariaDB
    20180202之engine,URL,base,session
    列表
  • 原文地址:https://www.cnblogs.com/duguxiren/p/12310652.html
Copyright © 2020-2023  润新知