我们经常会处理到json、和CSV格式的文件以及它们之间相互转换的问题,遇到load、loads、dump和dumps傻傻分不清楚,下面就来总结一下这四种用法以及它们之间的区别。
相同点
首先需要了解序列化和反序列化的定义。
- 序列化:变量从内存中变成可存储或传输的过程,本质是将对象状态转化为可保存或可传输格式的过程
- 反序列化:从序列化的对象重新读到内存里,本质是流转换为对象。
- dump和dumps都实现了序列化
- load和loads都实现反序列化
区别
dump和dumps(序列化)
- dump:将dict类型转换为json字符串格式,写入到文件(易存储)
dict_test = {'a':'123','b':'234'}
json.dump(dict_test,open('test.json','w')
- dumps:将dict转换为string(易传输)
dict_test = {'a':'123','b':'234'}
json.dumps(dict_test)
load和loads(反序列化)
- load:针对文件句柄,将json格式的字符转换为dict,从文件中读取(将string转换为dict)
output_json = json.load(open('test.json),'r')
- loads:针对内存对象,将string转换为dict
a = json.loads({'a':'123','b':'234'})
总结
- load:将json格式字符串转换为dict类型,读取文件
- loads:将string转换为dict
- dump:将dict类型转换为json格式字符串,存入文件
- dumps:将dict转换为string