文件的序列化与反序列化

文件的序列化与反序列化

一般情况下,将字符串直接写入文件(基于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() 函数对数据类型进行查看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值