携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情
使用文件的写操作,可以将字符串直接写进文件;但如果要把一个Python对象(如:列表list,元祖tuple,字典dict)写入文件,就需要先把对象进行序列化,才能写入文件中。
序列化:将内存中的数据对象转换成二进制对象序列
反序列化:二进制对象序列转换成内存中的数据
1、序列化
使用JSON实现序列化,JSON提供了dump()和dumps()方法实现对象的序列化。
dumps(): 将Python对象序列化成二进制对象,并将对象返回;
语法格式:
dumps (obj,protocol=None)
参数说明:
-
obj:要转换的 Python 对象。
-
protocol:转码协议,取值为 0、1、2、3、4,其中 0、1、2 对应 Python 早期的版本,3 和 4 则对应 Python 3.x 版本及之后的版本。默认为 3。
使用实例:
#导入json模块
import json
list1 = ['I', 'love','Python']
#以可写模式打开文件
file = open("test2.txt","w")
#将元组对象序列化并返回
list2 = json.dumps(list1)
#将序列化后的对象写入文件
file.write(list2)
#查看文件类型 序列化前
print(type(list1))
#序列化后
print(type(list2))
#关闭文件
file.close()
执行结果:
<class 'list'>
<class 'str'>
查看文件test2.txt内容:Python对象成功被写入文件中
["I", "love", "Python"]
dump():将 Python 中的对象序列化成二进制对象,并写入文件
语法格式:使用dump()函数在将Python对象序列化后会自动把json字符串写入文件中
dump(obj,file,protocol=None)
- file:要写入的文件对象
使用实例:
#导入json模块
import json
list1 = ['I', 'love','Python']
#以可写模式打开文件
file = open("test3.txt","w")
#将元组序列化,并写入文件
json.dump(list1,file)
#关闭文件
file.close()
执行结果:
查看文件test3.txt内容:Python对象成功被写入文件中
["I", "love", "Python"]
2、反序列化
loads():将二进制对象转换成 Python 对象
语法格式:
loads(date)
- date:要进行反序列化的二进制对象
使用实例:
#导入json模块
import json
#只读模式打开文件,并读取文件内容
file = open('test2.txt','r')
content = file.read()
print(content)
print(type(content))
#将json字符串反序列化,转成Python对象
content1 = json.loads(content)
print(content1)
print(type(content1))
执行结果:
["I", "love", "Python"]
<class 'str'>
['I', 'love', 'Python']
<class 'list'>
load():将二进制对象文件转换成 Python 对象
语法格式:使用 load()函数不用先读取文件内容,可以直接将二进制对象文件反序列化
load(file)
- file:要进行反序列化的文件对象
使用实例:
import json
file = open('test2.txt','r')
content = json.load(file)
print(content)
print(type(content))
执行结果:
['I', 'love', 'Python']
<class 'list'>