python中的序列化和反序列化

Posted 故俗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中的序列化和反序列化相关的知识,希望对你有一定的参考价值。

~~~~~~滴滴,,什么是序列呢?可以理解为序列就是字符串。
序列化的应用
  • 写文件(数据传输)
  • 网络传输
序列化和反序列化的概念
技术图片

 

 
  • 序列化模块:将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。
  • 序列化:内存中的对象转换为字节序列(字符串)
  • 反序列化:将字节序列转换为内存中的对象
序列化的目的:
1.以某种存储形式是自定义对象持久化
2.将对象从一个地方传递到另一个地方
3.使程序更具有维护性

各种模块的特点和应用

1.json模块:通用的序列化格式 只有很少的一部分数据类型通过json转化为字符串

 

可以进行序列化的:数字 字符串 元组 列表   不能转集合

 

1.dumps() 序列化方法
dic={‘a‘:‘1‘,"b":‘2‘}
print(type(dic),dic)
import json
str_dic=json.dumps(dic)
print(type(str_dic),str_dic)
结果:

<class ‘dict‘> {‘a‘: ‘1‘, ‘b‘: ‘2‘}
<class ‘str‘> {"a": "1", "b": "2"}

2.loads反序列化方法
dic_d=json.loads(str_dic)
print(type(dic_d),dic_d)
结果;
<class ‘dict‘> {‘a‘: ‘1‘, ‘b‘: ‘2‘}
3.dump和load  不加s  和文件相关的操作
import json
dic={‘a‘:‘1‘,"b":‘2‘}
f=open(‘fff‘,‘w‘,encoding=‘utf-8‘)
json.dump(dic,f)
f.close()

f=open(‘fff‘)
res=json.load(f)
print(type(res),res)
结果:
<class ‘dict‘> {‘a‘: ‘1‘, ‘b‘: ‘2‘}
技术图片

 

技术图片

 

当出现中文的时候:加上下面的参数,文件中显示的就是中文了
***ensure_ascii=False

json.dump({‘国籍‘:‘美国‘},f,ensure_ascii=False) ret = json.dumps({‘国籍‘:‘美国‘},ensure_ascii=False)
 
 

 

2.pickle模块:所有的python中的数据类型都可以转化 但只有pyth理解,且部分反序列化依赖代码

 

pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load  (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化

 

 

 

3.shelve模块:序列化句柄 直接操作,方便

此模块只提供给我们一个open方法,使用key来访问的,使用起来和字典类似

以上是关于python中的序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章

Python—序列化和反序列化模块(jsonpickle和shelve)

Python_日记 序列化和反序列化

python序列化和反序列化

python序列化和反序列化

无法反序列化当前的JSON对象,为啥

Python 对象的序列和反序列化