序列化与反序列化,json,pickle,xml,shelve,configparser模块

序列化与反序列化

什么是序列化?
序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络传输。
反序列化就是将硬盘中或者网络中传来的一种数据格式转换成内存中数据结构。

为什么要有?

1.可以保存程序的运行状态
2.实现数据的跨平台交互

怎么用?

json&pickle模块
其中json是通用的而pickle是只能在python识别

json优点:
具有跨平台性

json的局限性
只能支持/对应python部分的数据类型


pickle的优点:
可以支持所有的python数据类型

pickle的缺点:
只能被python识别,不能跨平台

————————————————————————————————————————————————————————————————————————————————————————————————————————————
json的序列化.py



import json


func_dic = {
'1': 'login',
'2': 'register',
'3': 'check_balance',
'4': 'transfer',
'5': 'reply',

}

# 序列化:将内存中的数据类型——————————————>json中间格式

# 1.序列化得到json_str
# json_str = json.dumps(func_dic)

# print(json_str,type(json_str))
# {"1": "login", "2": "register", "3": "check_balance", "4": "transfer", "5": "reply"} <class 'str'>

# json格式全都是双引号


# 2.把json_str写入文件存起来
# with open('func.json','wt',encoding='utf-8')as f :
# f.write(json_str)

# 1跟2合为一步
with open('func.json','wt',encoding='utf-8')as f:
json.dump(func_dic,f)


______________________________________________________________________________________________________________
json的反序列化.py


import json

# 反序列化:json的中间格式------------------>内存中的数据类型

#从文件中读取json_str
# with open('func.json','rt',encoding='utf-8')as f:
# json_str = f.read()
#
# # 将json_str转化成内存中的数据类型
# func_dic = json.loads(json_str)
#
# print(func_dic['2'])

# 1跟2可以合成一步

with open('func.json','rt',encoding='utf-8')as f:
func_die = json.load(f)

print(func_die['1'])


——————————————————————————————————————————————————————————————————————————————————————————————————————————————
json注意点
# json格式不能识别单引号,只能识别双引号


import json




# with open('func1.json','rt',encoding='utf-8')as f:
# l = json.load(f)
# print(l)


# 用json序列化
# with open('func1.json','wt',encoding='utf-8')as f:
# l=[1,None,True]
# json.dump(l,f)




# 用evel反序列化
# with open('func.json','rt',encoding='utf-8')as f:
# s = f.read()
# func_dic = eval(s)
# print(func_dic['1'])




# with open('func1.json','rt',encoding='utf-8')as f:
# s=f.read() #s = '[1,null,true]'
# l = eval(s) #evel('[1,null,true]')
# print(l)


# evel是把后面的字符串里的表达式拿出来在当前位置运行一下,把结果赋值给一个变量名



————————————————————————————————————————————————————————————————————————————————————————————————————————————-—
pickle的序列化与反序列化.py

import pickle


# dic = {'name':'zrg','password':123,'height':170,'weight':120}
#
# # 序列化
# pkl = pickle.dumps(dic)
# print(pkl,type(pkl))
#
# with open(r'db.pkl','wb')as f:
# f.write(pkl)


# with open(r'db.pkl','wb')as f:
# pickle.dump(dic,f)



# 反序列化
# with open(r'db.pkl','rb')as f:
# pkl = f.read()
# dic = pickle.loads(pkl)
# print(dic['name'])


# with open(r'db.pkl','rb')as f:
# dic = pickle.load(f)
#
# print(dic['weight'])
























































转载于:https://www.cnblogs.com/zhangrenguo/p/9806434.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值