文件的序列化与反序列化
一般情况下,将字符串直接写入文件(基于Python)如下:
fp = open('demo/test3.txt','w')
fp.write('hello world')
fp.close()
然而列表、元组、字典等对象是无法写入文件,如以下代码会报错。
fp_1 = open('demo/test4.txt','w')
name_list = ['张三','李四']
fp_1.write(name_list)
fp_1.close()
之所以要做序列化和反序列化的原因在于文件的写入操作不支持字典、元组、列表等对象的写入操作,因而需要先序列化后写入文件,而后读出时执行反序列化操作。
- 序列化:将列表、元组、字典等对象转成有序的字符串类型数据。
- 反序列化:将字符串类型数据转回列表、元组、字典等对象。
反序列化:字节序列(json字符串) ——> 对象
进行序列化:使用json库中的 dumps() 函数或 dump() 函数进行对象序列化。
使用 dumps() 函数文件序列化如下操作:
import json
fp_2 = open('demo/test5.txt','w')
name_list = ['zhangsan','lisi']
names = json.dumps(name_list)
fp_2.write(names)
fp_2.close()
使用 dump() 函数文件序列化如下操作:
fp_3 = open('demo/test6.txt','w')
name_list = ['zhangsan','lisi']
json.dump(name_list,fp_3)
# 这里可以看出,传入的参数多了一个文件对象,也即这就是指定的目标文件,序列化的内容会直接写进去
fp_3.close()
通过使用json库中的 dumps() 函数或 dump() 函数进行对象序列化对比, dumps() 函数与 dump() 函数的区别在于,dump()函数在完成序列化的同时,会指定目标文件,并完成写入操作。
反序列化:字节序列 (json字符串)- - - > 对象
进行反序列化:使用json库中的 loads() 函数或 load() 函数将json字符串反序列化。
使用 loads() 函数文件反序列化如下操作:
import json
fp_5 = open('demo/test6.txt','r')
content = fp_5.read()
content = json.loads(content)
fp_5.close()
使用 load() 函数文件反序列化如下操作:
import json
fp_6 = open('demo/test6.txt','r')
result = json.load(fp_6)
fp_6.close()
通过使用json库中的 loads() 函数或 load() 函数将json字符串反序列化对比, 与dumps() 函数和dump() 函数的区别一样,也是实现了两步合成一步,即读取字符串与字符串转json对象(列表、元组、字典)合并在一步。
完成序列化与反序列化的数据可以通过type() 函数对数据类型进行查看。