在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象。在python的标准库中,专门提供了json库与pickle库来处理这部分。
用于序列化的两个模块
json:用于字符串和Python数据类型间进行转换
pickle: 用于python特有的类型和python的数据类型间进行转换
json提供四个功能:dumps,dump,loads,load
pickle提供四个功能:dumps,dump,loads,load
#json.dumps()将一个Python数据结构转换为json
#json.loads()将一个JSON编码的字符串转换回一个Python数据结构
data1={'name':'橙子','age':22}
print(type(data1),data1)
#字典序列化为json格式的字符串
data2=json.dumps(data1,ensure_ascii=False)#如果有中文,我们需要加参数处理
print(type(data2),data2)
#json格式的字符串反序列化为字典
data3=json.loads(data2)
print(type(data3),data3)<class 'dict'> {'name': '橙子', 'age': 22}
<class 'str'> {"name": "橙子", "age": 22}
<class 'dict'> {'name': '橙子', 'age': 22}
#pickle.dumps()将数据通过特殊的形式转换为只有python语言认识的字符串
#pickle.loads()将pickle数据转换为python的数据结构
data4={'name':'荔枝','age':22}
print(type(data4),data4)
# dumps将数据通过特殊的形式转换为只有python语言认识的字符串
data5=pickle.dumps(data4)
print(type(data5),data5)
# loads将pickle数据转换为python的数据结构
data6=pickle.loads(data5)
print(type(data6),data6)<class 'dict'> {'name': '荔枝', 'age': 22}
<class 'bytes'> b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x06\x00\x00\x00\xe8\x8d\x94\xe6\x9e\x9dq\x02X\x03\x00\x00\x00ageq\x03K\x16u.'
<class 'dict'> {'name': '荔枝', 'age': 22}
#json (dump,load)文件内容进行序列化和反序列化
list1=['selenium','appium','android','ios','uiautomator']
#json.dump()用于将dict类型的数据转成str,并写入到txt/json文件中。
with open(r'C:\Users\wangli\PycharmProjects\Test\Test\1.txt','w') as f:json.dump(list1,f)
#json.load()用于从txt/json文件中读取数据
with open(r'C:\Users\wangli\PycharmProjects\Test\Test\1.txt','r') as f:print(json.load(f))['selenium', 'appium', 'android', 'ios', 'uiautomator']
#pickle(dump,load)文件内容进行序列化和反序列化
list2=['selenium','appium','android','ios']
# dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
with open(r'C:\Users\wangli\PycharmProjects\Test\Test\2.txt','wb') as f:pickle.dump(list2,f)
# load 从数据文件中读取数据,并转换为python的数据结构
with open(r'C:\Users\wangli\PycharmProjects\Test\Test\2.txt','rb') as f:print(pickle.load(f))['selenium', 'appium', 'android', 'ios']
eval()用法
list1='[1,2,3]'
list2=eval(list1)
list3=str(list2)
print(type(list1),list1,type(list2),list2,type(list3),list3)
tuple1='(1,2,3)'
tuple2=eval(tuple1)
tuple3=str(tuple2)
print(type(tuple1),tuple1,type(tuple2),tuple2,type(tuple3),tuple3)
dict1="{'name':'橙子','age':22}"
dict2=eval(dict1)
dict3=str(dict2)
print(type(dict1),dict1,type(dict2),dict2,type(dict3),dict3)<class 'str'> [1,2,3] <class 'list'> [1, 2, 3] <class 'str'> [1, 2, 3]
<class 'str'> (1,2,3) <class 'tuple'> (1, 2, 3) <class 'str'> (1, 2, 3)
<class 'str'> {'name':'橙子','age':22} <class 'dict'> {'name': '橙子', 'age': 22} <class 'str'> {'name': '橙子', 'age': 22}Process finished with exit code 0