python中的序列化_python中序列化

1.序列化之json

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

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

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

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

import json

dic={'name':'alvin','age':23,'sex':'male'}

print(type(dic))#

j=json.dumps(dic)

print(type(j))#

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))#

j=pickle.dumps(dic)

print(type(j))#

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'))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值