Python 两种序列化方法

Python中Pickle模块实现了基本的数据序列和反序列化

通过Pickle模块的序列化操作,我们能够将程序中运行的对象信息保存到文件中去,永久存储;


为什么需要序列化和反序列化这种操作呢?

  1. 便于存储:序列化过程将文本信息转换为二进制数据流。这样信息就容易存储在硬盘中,当需要读取文件的时候,从硬盘中读取数据,然后再将其反序列化便可得到原始的数据。在python程序运行中,得到的一些字符串、列表、字典等数据,想要长久的保存下来,pickle可以将这些对象转换为传输或存储。
  2. 便于传输:当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论时何种类型的数据,都会以二进制的形式在网络上传送。发送方需要把这个对象转换为字节序列,能在网络上传输;接收方则需要把字节序列恢复为对象

pickle模块是以二进制的形式序列化后保存在文件中的(后缀名为:.pki);不能够直接打开进行预览。

python的另一个序列化标准模块json,是可以进行打开查看的。


系列化操作:pickle库的使用

序列化操作

pickle.dump()
Pickler(file, protocol).dump(obj)

反序列化操作

pickle.load()
Unpickler(file).load()

使用json进行数据的序列化

import json

dict = {"name":"zhangsan", "age":13, "address":"changningqu"}
dict, type(dict)  # ({'name': 'zhangsan', 'age': 13, 'address': 'changningqu'}, dict)

进行序列化

dict_xu = json.dumps(dict, ensure_ascii=False)
dict_xu, type(dict_xu)  # ('{"name": "zhangsan", "age": 13, "address": "changningqu"}', str)

进行反序列化

dict_fan = json.loads(dict_xu)
dict_fan, type(dict_fan)  # ({'name': 'zhangsan', 'age': 13, 'address': 'changningqu'}, dict)

使用pickle进行序列化

import pickle
data = {"name":"zhangsan", "age":13, "address":"changningqu"}
data, type(data)
"""
{'name': 'zhangsan', 'age': 13, 'address': 'changningqu'}
"""

进行序列化

pickling = pickle.dumps(data)
pickling, type(pickling)
"""
(b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x08\x00\x00\x00zhangsanq\x02X\x03\x00\x00\x00ageq\x03K\rX\x07\x00\x00\x00addressq\x04X\x0b\x00\x00\x00changningquq\x05u.',
 bytes)
"""

进行反序列化

unpickling = pickle.loads(pickling)
unpickling, type(unpickling)
"""
({'name': 'zhangsan', 'age': 13, 'address': 'changningqu'}, dict)
"""

将序列化后的信息保存在文件中

with open("pickling.data", "wb") as f:
    pickle.dump(data, f)

将序列文件进行反序列化

with open("pickling.data", "rb") as f:
    unpickling=pickle.load(f)
    print(unpickling)

"""
{'name': 'zhangsan', 'age': 13, 'address': 'changningqu'}
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹏AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值