序列化模块

本文深入介绍了序列化技术,包括json、pickle和shelve三个模块的使用方法及特点。json适用于跨语言的数据交换,pickle支持更广泛的数据类型但局限于Python环境,shelve则提供了一种简单的方式来存储Python对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.序列化:把内存里的数据转化成字符串,以存到硬盘上

把字符转换成内存数据,为反序列化

用于序列化的模块有:json,pickle,shelve

 

一:json

# dumps把内存数据类型序列化 
data = {'age':18,"name":'dempsey'}
a = json.dumps(data)
print(a,type(a))
#{"age": 18, "name": "dempsey"} <class 'str'>

# 存到文件里
f = open('text.json','w',encoding='utf-8')
json.dump(data,f) # 注意:第二个参数为文件对象,并不是文件名,所以要先打开个文件


# 反序列化
data = {'age':18,"name":'dempsey'}
a = json.dumps(data)
a2 = json.loads(a)
print(a2,type(a2))
# {'age': 18, 'name': 'dempsey'} <class 'dict'>

# 把文件里的字符反序列化读取到内存里
f = open("text.json",'r')
data2 = json.load(f)
print(data2,type(data2))
#{'age': 18, 'name': 'dempsey'} <class 'dict'>

只是把数据类型转换成字符串存到内存里的意义?

1.把 内存数据通过网络传输共享给远程其他人

2.定义了不同语言之间的交互规则:

纯文本:不能共享复杂的数据类型

xml:可读性差,占空间大

json:可读性好,占空间小

二.pickle模块

# 把数据类型存到文件里
data1 = [1,2,3,4,5]
data2 = {"name":"zdp","age":18}
#pickle的dump实际上是把数据类型转成bytes类型,要用wb模式
f = open("text.pkl",'wb') 
pickle.dump(data1,f)

# 把数据类型从文件里读到内存里
f = open('text.pkl','rb')
a = pickle.load(f)
print(a)

总结:

json: 只能处理str, tuple, list, dict, int 类型

pickle: 支持python里所有的数据类型(包括函数), 但只能在python里使用

三.shelve模块,对pickle进行封装,只能在python中使用

json只能把一个数据类型放到一个文件里,只能一次dump,load一次

而shelve可以利用key-value模式存多个数据类型

a = [1,2,3,4]
b = {"name":'zdp',"age":18}

f  = shelve.open('shelve_text') #打开一个文件
# 持久化列表
f['numbers'] = a
f['dict'] = b

# 可以对f进行相当于字典的操作
print(list(f.keys()))
print(f.get('numbers'))
f.close()

# ['numbers', 'dict']
# [1, 2, 3, 4]

可以对数据类型进行重新赋值,删除操作,添加新的键值对操作。

转载于:https://www.cnblogs.com/dempsey888/p/9573279.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值