zoukankan      html  css  js  c++  java
  • python中序列化

    1.序列化之json

     注意:如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式

    ,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,

    可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标

    准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

    import json

    dic={'name':'alvin','age':23,'sex':'male'}
    print(type(dic))#<class 'dict'>

    j=json.dumps(dic)
    print(type(j))#<class 'str'>

    f=open('序列化对象','w')
    f.write(j) #-------------------等价于json.dump(dic,f)
    f.close()
    #-----------------------------反序列化
    import json
    f=open('序列化对象')
    data=json.loads(f.read())# 等价于data=json.load(f)

    import json

    #dct="{'1':111}"#json 不认单引号

    #dct=str({"1":111})#报错,因为生成的数据还是单引号:{'one': 1}

    dct='{"1":"111"}'

    print(json.loads(dct))

    #conclusion:

           # 无论数据是怎样创建的,只要满足json格式,就可以json.loads出来,不一定非要dumps的数据才能loads

    2.序列化之pickle

     注意:Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用

    于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存

    那些不重要的数据,不能成功地反序列化也没关系。

    import pickle

    dic={'name':'alvin','age':23,'sex':'male'}
    print(type(dic))#<class 'dict'>
    j=pickle.dumps(dic)
    print(type(j))#<class 'bytes'>
    f=open('序列化对象_pickle','wb')#注意是w是写入str,wb是写入bytes,j是'bytes'
    f.write(j) #-------------------等价于pickle.dump(dic,f)
    f.close()
    #-------------------------反序列化
    import pickle
    f=open('序列化对象_pickle','rb')
    data=pickle.loads(f.read())# 等价于data=pickle.load(f)
    print(data['age'])

    3.序列化之configparser

    import configparser
    config=configparser.ConfigParser()
    config.read('a.cfg')
    #查看所有的标题
    res=config.sections() #['section1', 'section2']
    print(res)
    #查看标题section1下所有key=value的key
    options=config.options('section1')
    print(options) #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']
    #查看标题section1下所有key=value的(key,value)格式
    item_list=config.items('section1')
    print(item_list) #[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), ('is_admin', 'true'), ('salary', '31')]
    #查看标题section1下user的值=>字符串格式
    val=config.get('section1','user')
    print(val) #egon
    #查看标题section1下age的值=>整数格式
    val1=config.getint('section1','age')
    print(val1) #18
    #查看标题section1下is_admin的值=>布尔值格式
    val2=config.getboolean('section1','is_admin')
    print(val2) #True
    #查看标题section1下salary的值=>浮点型格式
    val3=config.getfloat('section1','salary')
    print(val3) #31.0



    改写:
    import configparser
    config=configparser.ConfigParser()
    config.read('a.cfg',encoding='utf-8')
    
    
    #删除整个标题section2
    config.remove_section('section2')
    
    #删除标题section1下的某个k1和k2
    config.remove_option('section1','k1')
    config.remove_option('section1','k2')
    
    #判断是否存在某个标题
    print(config.has_section('section1'))
    
    #判断标题section1下是否有user
    print(config.has_option('section1',''))
    
    
    #添加一个标题
    config.add_section('egon')
    
    #在标题egon下添加name=egon,age=18的配置
    config.set('egon','name','egon')
    config.set('egon','age',18) #报错,必须是字符串
    
    
    #最后将修改的内容写入文件,完成最终的修改
    config.write(open('a.cfg','w'))
  • 相关阅读:
    本地计算机上的SQL Server(MSSQLSERVER)服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止
    三色需求与工作层次
    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Gold;第一次无效
    c# 在DataTable的第一列(指定列)的前面添加一列
    去掉DataGridView最后一行的空白行,删除空白行
    阿里云OSS Multipart Upload上传实例
    sql 自动增加排序 并且初始值是000001
    HTML禁用Flash文件右键
    HTML,JS禁止鼠标右键、禁止全选、复制、粘贴的方法
    C#PDF转Word
  • 原文地址:https://www.cnblogs.com/lixiaoting/p/11090914.html
Copyright © 2011-2022 走看看