1. 主页
  2. Python基础到高级
  3. 序列化及反序列化

序列化及反序列化

上下文管理

with方法,会自动关闭文件

with open('test1.txt') as f:
    f.write('test')    # 这里是with的代码块,超出这里的话,就会关闭文件

上下文管理会在离开时,会自动关闭文件,但是他不会开启新的作用域

序列化与反序列化

  • 序列化:对象转化为数据
  • 反序列化:数据转化为对象

在Python中是用pickle模块在操作序列化与反序列化的

pickle是遵循python私有的协议,来进行数据的序列化与反序列化的

当反序列化一个对象时,必须存在此对象的类

虽然序列化的对象,但是事实仅仅只是数据别序列化了

In [6]: class A:   # 定义一个类
   ...:     def __init__(self):
   ...:         self.data = []
   ...:     def server(self):
   ...:         self.data = list(range(10))
   ...:     def client(self):
   ...:         print(self.data)
   ...:         

In [7]: a = A()   # 实例化一个类

In [8]: aa = pickle.dumps(a)   # 序列化一个类对象

In [10]: b = pickle.loads(aa)   # 反序列化类对象

In [11]: b.server()   # 在server端执行生成数据

In [12]: b.client()   # 在client端打印出生成的数据
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

应用场景

在做server端和agent端数据交互的时候,会常用到。

pickle是在server端和client端都是python代码的时候,可以使用。

如果server端是python,client端是javascript的话,那么就不能使用pickle了, 因为javascript无法反序列化数据

当client端的接受方式不一样的时候,那么现在常用到的就是,使用json的方式序列化与反序列化数据,因为json是通用的

同时由于json的可序列化的数据类型很少,因此现在又了很多的类似的模块,现在msgpack就在慢慢的被大家熟知和使用,未来可能为替代json来做不用语言之间的数据交互

我们要如何帮助您?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注