Python(十三)——文件的序列化和反序列化

171 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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'>