Python内建模块struct实例详解

yizhihongxing

Python内建模块struct实例详解

什么是struct模块

struct模块是Python内建的一个用于处理二进制数据的模块。它提供了一种专门用于处理C语言中的结构体(structure)和其他二进制数据类型(如字符串、整型、浮点型等)的方法,可以帮助我们将一个Python对象转换为二进制数据流,或从二进制数据流中解析出Python对象。

struct模块的用法

struct模块主要有两个核心函数,分别是pack()unpack(),它们分别用于将Python对象打包为一个二进制数据流(序列化),和从二进制数据流中解析出Python对象(反序列化)。

pack函数

pack(fmt, v1, v2, ...)用于将变量v1, v2, ...按照指定的格式(fmt)打包成一个二进制字符串(bytes类型),并返回打包后的数据。其中,fmt参数表示打包的格式,它由一系列格式化字符和数字所组成。

格式化字符和数字的含义如下:

字符 对应类型 字节数
x 填充字节 1
c 字符型 1
b 有符号字节型 1
B 无符号字节型 1
? 布尔型 1
h 有符号短整型 2
H 无符号短整型 2
i 有符号整型 4
I 无符号整型 4
l 有符号长整型 4
L 无符号长整型 4
q 有符号长长整型 8
Q 无符号长长整型 8
f 单精度浮点型 4
d 双精度浮点型 8
s 字符串 无固定长度
p 经过编码的字符串 无固定长度
P 指针(无符号长整型) 与机器有关

下面给出一个例子,展示如何使用pack()函数将一个Python对象打包为一个二进制数据流。

import struct

# 打包一个字符串、一个整数和一个浮点数
packed_data = struct.pack('5sif', b'hello', 123, 3.14)
print(packed_data) # b'hello\x00{\x00\x00\x80?\x00\x00\x80?'

在这个例子中,我们将一个字符串(b'hello')、一个整数(123)和一个浮点数(3.14)打包成了一个二进制数据流,它们的格式为'5sif'。其中,'5s'表示5个字节长的字符串(字符串末尾会自动补\x00),'i'表示整数,'f'表示浮点数。

unpack函数

unpack(fmt, string)用于将二进制字符串(string参数)按照指定的格式(fmt)解包,并将解包后的数据以元组形式返回。

下面给出一个例子,展示如何使用unpack()函数从一个二进制数据流中解析出Python对象。

import struct

# 解包一个字符串、一个整数和一个浮点数
packed_data = b'hello\x00{\x00\x00\x80?\x00\x00\x80?'
unpacked_data = struct.unpack('5sif', packed_data)
print(unpacked_data) # (b'hello', 123, 3.140000104904175)

在这个例子中,我们将一个二进制数据流(b'hello\x00{\x00\x00\x80?\x00\x00\x80?')按照格式'5sif'进行解析,得到一个元组(b'hello', 123, 3.14)

示例说明

示例1:打包一个字典,并将其保存到文件中

import struct

# 定义一个字典
data = {
    'username': 'john',
    'age': 21,
    'height': 1.75
}

# 打包字典
packed_data = struct.pack('5si2f', b'john\00', 21, 1.75, 0)

# 将二进制数据保存到文件中
with open('data.dat', 'wb') as f:
    f.write(packed_data)

在这个例子中,我们定义了一个字典data,并将其打包成一个二进制数据流(packed_data)。我们使用了'\00'这个字符来分隔字符串,因为在C语言中,字符串是以'\00'作为结束标志的。然后,我们将打包后的二进制数据写入了一个文件data.dat中。

示例2:从文件中读取二进制数据,并解析出字典

import struct

# 从文件中读取二进制数据
with open('data.dat', 'rb') as f:
    packed_data = f.read()

# 解包二进制数据
unpacked_data = struct.unpack('5si2f', packed_data)
username = unpacked_data[0].decode('utf-8')
age = unpacked_data[1]
height = unpacked_data[2]

# 将元组转换成字典
data = {
    'username': username,
    'age': age,
    'height': height
}

print(data) # {'username': 'john', 'age': 21, 'height': 1.75}

在这个例子中,我们从文件data.dat中读取了一个二进制数据,然后使用unpack()函数将其解包成一个元组(unpacked_data)。由于打包时使用了'5s'格式,所以解包后的第一个元素是一个5个字节长的字符串(unpacked_data[0]),我们需要使用decode()方法将其转换为字符串。最后,我们将元组转换成了一个字典data,并输出了其内容。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python内建模块struct实例详解 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • 分享四个python接口常用封装函数

    当我们在编写 Python 程序时,有时会使用第三方库或 API 来实现一些功能。在使用这些外部资源时,我们需要使用一些封装函数来使我们的代码更加易于编码和维护。在本篇文章中,我将与大家分享四个 Python 接口常用封装函数。 1. 获取 API 数据 对于许多 Web 操作,我们需要从第三方 API 中获取数据。为了方便代码开发和维护,我们可以编写一个获…

    python 2023年6月3日
    00
  • 学习python可以干什么

    学习Python可以干什么? Python是一门动态的、高级的、解释性的编程语言。Python的语法简洁明了、易于上手,而且有着强大的库支持,在科学计算、数据分析、网络编程等方面被广泛应用。 下面是学习Python的完整攻略: 第一步:掌握基础语法 首先需要掌握Python的基础语法,包括变量、数据类型、流程控制、函数、面向对象编程等内容。建议从官方文档入手…

    python 2023年5月30日
    00
  • python中使用iterrows()对dataframe进行遍历的实例

    使用iterrows()方法可以对DataFrame进行遍历。以以下数据为例: import pandas as pd df = pd.DataFrame({‘name’:[‘Amy’, ‘Bob’, ‘Charlie’], ‘age’:[26, 28, 25], ‘score’:[85, 91, 89]}) 示例一 我们可以通过iterrows()对Dat…

    python 2023年5月14日
    00
  • Python实现将内容写入文件的五种方法总结

    Python实现将内容写入文件的五种方法总结 在Python中,将内容写入文件是一个经常需要用到的操作。因此,掌握多种方法能够更好的完成这一任务。 方法1:使用write()方法 使用Python的内置函数open()来打开或创建一个文件,再通过文件对象的write()方法向文件中写入文本字符。 示例: file = open(‘example.txt’, …

    python 2023年5月19日
    00
  • 批处理与python代码混合编程的方法

    批处理与 Python 代码混合编程的方法包括如下几个步骤: 在批处理文件中调用 Python 脚本; 在 Python 脚本中使用 subprocess 模块来启动批处理指令。 以下是两个示例,一个示例是在批处理文件中调用 Python 脚本,另一个示例是在 Python 脚本中使用 subprocess 模块来启动批处理指令。 示例 1:在批处理文件中调…

    python 2023年5月31日
    00
  • 利用Python实现文件读取与输入以及数据存储与读取的常用命令

    文件读取和输入是Python编程中非常常见的操作。在处理大规模数据时,常常需要将数据存储在文件中,然后使用Python程序读取并进行相应的处理。以下是实现文件读取与输入以及数据存储与读取的常用命令及攻略。 读取文件 Python提供了多种方法读取文本文件,其中最常用的是open()函数。使用open()函数打开文件时需要两个参数,即文件名和打开文件的模式。 …

    python 2023年6月2日
    00
  • 在django项目中导出数据到excel文件并实现下载的功能

    下面是在Django项目中导出数据到Excel文件并实现下载的功能的完整实例教程: 步骤一:安装依赖库 使用pip命令安装以下库: pandas: 用于操作数据 openpyxl: 用于操作Excel文件 django-forms: 用于创建表单 运行以下命令安装依赖库: pip install pandas openpyxl django-forms 步骤…

    python 2023年5月13日
    00
  • python导入库的具体方法

    通过导入内置、第三方或自定义的Python库,我们可以扩展 Python 的功能并让开发更高效。下面是 Python 导入库的具体方法攻略。 1. 导入内置库 Python 内置了许多常用库,例如os、time和re等。导入内置库只需要使用 import 关键字加上库名即可。 示例代码: import os # 使用os模块的方法 os.chdir(‘/pa…

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部