对象就是抽象化的概念,比如列表、字典、元组都是对象,而对象序列化就是将对象持久化操作,把这种抽象化的概念持久化在磁盘上,将对象转换为字节数据和字符数据
Python提供了pickle模块和json模块序列化对象
pickle模块可以将列表、字典、集合、类等序列化,将其转换为字节数据
dumps():将对象序列化为字节数据
import pickle
a = [1,2,3,4]
date = pickle.dumps(a)
print(date)
f = open("a.dat","wb")
f.write(date)
f.close()
b'\x80\x04\x95\r\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03K\x04e.'
loads():将字节数据反序列化为对象
import pickle
f = open("a.dat","rb")
show = f.read()
show = pickle.loads(show)
print(show)
[1, 2, 3, 4]
dump():将对象序列化为字节数据并且保存在文件中
import pickle
a = [1,2,3]
x = pickle.dump(a,open("a.dat","wb"))
f = open("a.dat","rb")
print(f.read())
b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03e.'
load():自动读取文件并且将字节数据反序列化为对象
import pickle
x = pickle.load(open("a.dat","rb"))
print(x)
[1, 2, 3]
json模块可以将列表、字典、集合、类等序列化,将其转换为字符数据
注意:json一般是用来操作字典对象
dumps():将对象序列化为字符数据
import json
a = {"name":"张三","age":18}
x = json.dumps(a)
f = open("a.txt","w")
f.write(x)
print(x)
{"name": "\u5f20\u4e09", "age": 18}
loads():将字符数据反序列化为对象
import json
f = open("a.txt","r")
x = f.read()
x = json.loads(x)
print(x)
{'name': '张三', 'age': 18}
dump():将对象序列化为字符数据并且保存在文件中
import json
a = {"name":"李四","age":18}
x = json.dump(a,open("a.txt","w"))
f = open("a.txt","r")
print(f.read())
{"name": "\u674e\u56db", "age": 18}
load():自动读取文件并且将字符数据反序列化为对象
import json
x = json.load(open("a.txt","r"))
print(x)
{'name': '李四', 'age': 18}
总结:dump和load都会比dumps和loads便捷使用