Python文件的应用之序列化与反序列化详解

Python文件的应用之序列化与反序列化详解

什么是序列化?

序列化(Serialization)是指将对象的状态转换为可以存储或传输的形式的过程,通常将对象序列化为字节流或文本流的形式。在将对象传输或存储的时候,需要对其进行序列化,以便于传输或保存到磁盘中。在 Python 中,序列化的实现通常采用 pickle 模块。

序列化的基本使用

将对象序列化为字节流

下面是一个将 Python 对象序列化为字节流的简单示例:

import pickle

# 定义一个简单的数据结构
user_info = {
    'name': '张三',
    'age': 25,
    'gender': 'male'
}

# 将 Python 对象 user_info 序列化为字节流
user_info_bytes = pickle.dumps(user_info)
print(user_info_bytes)

将上述代码保存到 Python 代码文件中,例如文件名为 serialize_demo.py,然后在命令行中运行 python3 serialize_demo.py,可以看到以下输出结果:

b'\x80\x04\x95\x1b\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x06\xe5\xbc\xa0\xe4\xb8\x89\x94\x8c\x03age\x94K)\x8c\x06gender\x94\x8c\x04male\x94ub.'

其中,b'' 表示字节串类型,\x 表示一个 16 进制字符,这就是字节流的形式。

将对象序列化为文本流

将 Python 对象序列化为文本流,也就是将序列化后的字节流进行 base64 编码,如下示例所示:

import pickle
import base64

# 定义一个简单的数据结构
user_info = {
    'name': '张三',
    'age': 25,
    'gender': 'male'
}

# 将 Python 对象 user_info 序列化为文本流
user_info_str = base64.b64encode(pickle.dumps(user_info)).decode('utf-8')
print(user_info_str)

运行上述代码,输出结果如下:

gASVcQAAAAAAAAB9lE0KUXRyYWNlSW5mb3JtAAjaB1gAX11VA2phZGVzYQpxA2dlbmRlcgpxA3RpdGxlcQNVbmFtZQRyzgX/////OM17hnEGHc1LgX//////////8=",

反序列化的基本使用

将字节流反序列化为 Python 对象

下面是一个将字节流反序列化为 Python 对象的简单示例:

import pickle

# 定义一个简单的数据结构
user_info = {
    'name': '张三',
    'age': 25,
    'gender': 'male'
}

# 将 Python 对象 user_info 序列化为字节流
user_info_bytes = pickle.dumps(user_info)

# 将字节流反序列化为 Python 对象
user_info_obj = pickle.loads(user_info_bytes)
print(user_info_obj)

运行上述代码,输出结果如下:

{'name': '张三', 'age': 25, 'gender': 'male'}

将文本流反序列化为 Python 对象

将文本流反序列化为 Python 对象,也就是将序列化后的 base64 编码解码为字节流,然后对其进行反序列化,如下示例所示:

import pickle
import base64

# 定义一个简单的数据结构
user_info = {
    'name': '张三',
    'age': 25,
    'gender': 'male'
}

# 将 Python 对象 user_info 序列化为文本流
user_info_str = base64.b64encode(pickle.dumps(user_info)).decode('utf-8')

# 将文本流反序列化为 Python 对象
user_info_obj = pickle.loads(base64.b64decode(user_info_str.encode('utf-8')))
print(user_info_obj)

运行上述代码,输出结果如下:

{'name': '张三', 'age': 25, 'gender': 'male'}

通过上述示例,我们可以发现序列化和反序列化都是非常简单的操作,而且在 Python 中已经有了很方便的实现方式。当我们需要传输或者存储某些对象时,很容易就可以使用 Python 的序列化工具来实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python文件的应用之序列化与反序列化详解 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • python3处理含有中文的url方法

    当我们使用Python处理含有中文的URL时,需要先进行URL编码,将中文转换成对应的URL编码,以保证URL的正确性。下面是处理含有中文的URL的完整攻略。 1. URL编码 URL编码是将URL中的非ASCII字符转换为特殊字符序列来表示,以便在所有的Web浏览器和服务器中传输。Python提供了urllib.parse模块中的quote()函数,可以实…

    python 2023年5月20日
    00
  • Python:如何在新的终端窗口/命令提示符中执行线程?

    【问题标题】:Python: How to execute a thread in a new terminal window/command prompt?Python:如何在新的终端窗口/命令提示符中执行线程? 【发布时间】:2023-04-04 20:04:01 【问题描述】: 如何在新的终端窗口/命令提示符下执行脚本中的线程?这样线程的结果将显示在一…

    Python开发 2023年4月6日
    00
  • 教你怎么用python连接sql server

    以下是教你怎么用 Python 连接 SQL Server 的完整攻略: 准备工作 在 Windows 系统上安装 SQL Server 实例,并确保已创建一个数据库。 安装 SQL Server 的 Python 驱动程序 pyodbc。可以使用以下命令在命令行中安装: shell pip install pyodbc 打开 SQL Server 的 SQ…

    python 2023年5月20日
    00
  • Django REST framework 异常处理

    在Django REST framework中,异常处理是一种用于处理API请求和响应中可能出现的异常的机制。它可以捕获和处理异常,并返回相应的错误响应。下面是Django REST framework异常处理的使用攻略: 1. 场景 Django REST framework异常处理通常用于处理API请求和响应中可能出现的异常。在API请求和响应中,会出现…

    python 2023年5月13日
    00
  • 微信跳一跳python自动代码解读1.0

    针对“微信跳一跳python自动代码解读1.0”的完整攻略,我给您详细讲解一下。 首先,该项目的目标是用Python语言自动玩微信跳一跳游戏。具体实现时,通过截图获取游戏截图,然后通过图形分析算法获取两个点的坐标并计算跳跃距离,最后模拟屏幕点击实现自动跳跃。 以下是完整攻略细节: 一、准备工作 1. 安装Python环境 首先需要在电脑上安装Python环境…

    python 2023年5月19日
    00
  • python的常见命令注入威胁

    Python在服务端应用中越来越受欢迎。但是,它也同样面临着常见的命令注入攻击的威胁,攻击者可以利用Python脚本中的一些漏洞来直接执行系统命令,特别是在web应用程序中。 常见的Python命令注入攻击大致包括以下几个步骤: 寻找目标,确定注入点 攻击者需要找到一个可以被注入的地方,比如用户输入的参数、标记引擎等。注入点不一定在Python脚本中,有可能…

    python 2023年6月3日
    00
  • pip报错“ImportError: cannot import name ‘main’ from ‘pip._internal.cli.status_command’ (/usr/lib/python3/dist-packages/pip/_internal/cli/status_command.py)”怎么处理?

    当使用pip安装Python包时,可能会遇到“ImportError: cannot import name ‘main’ from ‘pip._internal.cli.status_command’ (/usr/lib/python3/dist-packages/pip/_internal/cli/status_command.py)”错误。这个错误通常…

    python 2023年5月4日
    00
  • 试图让 Python 连接生成的列向量以形成二维数组。它不工作

    【问题标题】:Trying to get Python to concatenate generated column vectors to form a two dimensional array. It’s not working试图让 Python 连接生成的列向量以形成二维数组。它不工作 【发布时间】:2023-04-05 10:11:01 【问题描…

    Python开发 2023年4月5日
    00
合作推广
合作推广
分享本页
返回顶部