序列化模块

什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。
那为什么要序列化呢?
比如,我们在python代码中写的一段代码需要c上使用,那我们怎么给?我们能想到的方法就是存在文件里,然后在c上再从文件里读出来。
但是我们都知道,对于文件来说是没有
不是所有的数据类型文件都能够识别的比如字典、列表等,所以我们只能将数据转换成字典放到文件中。
通过文件在c上进行反序列化再从文件里读出来。就可以实现不同编译程序间数据的共用了。
序列



json

Json模块提供了四个功能:dumps、dump、loads、load 

dumps 和 loads 用于python对象和字符串间的序列化和反序列化
dumps:将python 基本数据类型转化为json格式字符串 loads:将json格式数据类型转化为python数据类型

 

# dic = {1:"a",2:'b'}
# print(type(dic),dic)
<class 'dict'> {1: 'a', 2: 'b'} # import json # str_d
= json.dumps(dic) # 序列化 # print(type(str_d),str_d) <class 'str'> {"1": "a", "2": "b"} #注意,json转换完的字符串类型的字典中的字符串是由""表示的 # dic_d = json.loads(str_d) # 反序列化 #此时要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示 # print(type(dic_d),dic_d)
<class 'dict'> {'1': 'a', '2': 'b'}

dump 和load 用于对文件进行序列化和反序列化


dump:主要用于json文件的读写,json.dump(x,f),x是对象,f是一个文件对象,这个方法可以将json字符串写入到文本文件中
load:进行反序列,读取文件。

#import json
#dic = {1:"a",2:'b'}
#f=open('序列化.txt','w',encoding='utf-8')
#json.dump(dic ,f)#将dic序列化,并写入f文件
#close

#e1
= json.load(open('序列化.txt','r')) #读取json文件 print("e1的类型:",type(e1)) print('e1的内容:',e1)


pick

 

pickle是python中独有的序列化模块,所谓独有,就是指不能和其他编程语言的序列化进行交互,因为pickle将数据对象转化为bytes

pickle模块同样提供了四个功能:dumps、dump、loads、load

 

 dumps/loads将所传入的变量的值序列化为一个bytes类型,然后,就可以将这个bytes写入磁盘或者进行传输,

 再用loads方法反序列化出对象。

# import pickle
# d=[1,2,3,4]
# print(pickle.dumps(d))
b'x80x03]qx00(Kx01Kx02Kx03Kx04e.'   
>>> d=[1,2,3,4]
>>> r=pickle.dumps(d)
>>> print(r)
b'x80x03]qx00(Kx01Kx02Kx03Kx04e.'
>>> pickle.loads(r)
[1, 2, 3, 4]

 

 dump/load则更加一步到位,在dump中可以传入两个参数,一个为需要序列化的变量,另一个为需要写入的文件。

  再用load方法直接反序列化一个文件

# f=open('file','wb')    #用dump序列化,需要用bytes类型的wb和rb
# d=[1,2,3,4]
# pickle.dump(d,f)
# f.close()
# f=open('file','rb')
# f.read()
b'x80x03]qx00(Kx01Kx02Kx03Kx04e.'
# d=[1,2,3,4]
# f=open('file_test','wb')
# pickle.dump(d,f)
# f.close()
# f=open('file_test','rb')
# r=pickle.load(f)
# f.close()
# print(r)
[1, 2, 3, 4]

原文地址:https://www.cnblogs.com/liusouthern/p/8269085.html