Python的Struct模块,用法以及个人理解

简介

python strtuct模块主要在Python中的值于C语言结构之间的转换。可用于处理存储在文件或网络连接(或其它来源)中的二进制数据。

顺序、格式字符

现在先不要看图表,稍后我们回来看。图片来自Python官网
图片描述
图片描述

例子

用例子说明效果是最好的,我们用特定格式往二进制文件里写入数据,然后再读出数据。

#! usr/bin/env python3
# -*- conding:utf-8 -*-

import struct

'''
数据格式
名字  职业   年
muyu  coder 2018
'''

name = b'muyu'
job = b'coder'
year = 2018


file = open(r'C:\Users\matzoh\Desktop\test.bin', 'rb+')

file.write(struct.pack('4s5si', name, job, year))
file.flush()

file.seek(0)

strBin = file.read()
print(strBin) # b'muyucoder\x00\x00\x00\xe2\x07\x00\x00'

content = struct.unpack('4s5si', strBin)
print(content) # (b'muyu', b'coder', 2018)
上述代码的含义就是,以二进制格式打开一个文件,以指定格式写入一个二进制串,再从文件取出二进制串,再把取出的串 翻译成python数据
struct 最常用的方法有两个:
struct.pack(fmt,v1,v2,…)
返回的是一个字符串,是参数按照fmt数据格式组合而成

struct.unpack(fmt,string)
按照给定数据格式解开(通常都是由struct.pack进行打包)数据,返回值是一个tuple


两个方法的第一个参数都是fmtfmt就是上面的两个表格,我们根据实际内容(具体需求)写出fmt串,读取或写入文件

文中我们的fmt串是4s5si,具体含义对照上面表格:

4s表示4字节的字符串(可能我们会遇到整数计数,例如 5h,意思是5个相同的h,意思和4s并不一样)
5s含义同4s i表示整数(有符号)
具体解释官方文档也有

上述代码运行结果:

b'muyucoder\x00\x00\x00\xe2\x07\x00\x00'
(b'muyu', b'coder', 2018)

记录自己的学习笔记,好记性不如烂笔头(而且还不是好记性...)

拓展

看完本篇文章,有兴趣的可以看:struct(廖雪峰)这篇文章,文章讲怎么从bmp文件中读取内容

感谢

学习Python主要在:廖雪峰的官方网站菜鸟教程这两个网站学习,很感谢他们!

也很感谢其他乐于分享贡献知识经验的人,谢谢

原文在自己的小博客:木鱼博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中的struct模块是用来处理二进制数据的,它可以将数据转换成字节流进行打包和解包操作。下面是一些常见的用法说明: 1. struct.pack(format, v1, v2, ...):将数据按照格式(format)进行打包,返回打包后的字节流。 2. struct.unpack(format, buffer):按照格式(format)对字节流进行解包,返回解包后的元组。 3. struct.calcsize(format):计算格式(format)所对应的字节流的长度。 4. format格式说明: - 'x':表示一个字节的填充值 - 'b':表示有符号的字节类型 - 'B':表示无符号的字节类型 - 'h':表示有符号的短整型 - 'H':表示无符号的短整型 - 'i':表示有符号的整型 - 'I':表示无符号的整型 - 'l':表示有符号的长整型 - 'L':表示无符号的长整型 - 'f':表示单精度浮点型 - 'd':表示双精度浮点型 - 's':表示字符串类型,需要指定长度 - 'p':表示Pascal字符串类型,需要指定长度 - 'q':表示有符号的长长整型 - 'Q':表示无符号的长长整型 例如,将一个整数和一个浮点数打包成字节流的代码如下: ```python import struct i = 10 f = 3.14 buf = struct.pack('if', i, f) print(buf) ``` 输出结果为: ``` b'\n\x00\x00\x00\x9d\x0f\x49\x40' ``` 解释一下:'\n'的ASCII码为10,是整数i的字节表示,'\x00\x00\x00'是浮点数f的字节表示,'\x9d\x0f\x49\x40'是浮点数f的剩余字节表示。 ### 回答2: Pythonstruct模块提供了一种在Python中处理二进制数据的方式。它允许我们将数据打包成一个字符串,或者从一个字符串中解包数据。下面是对struct模块用法说明: 1. 打包数据: 打包是将多个变量按照指定的格式编码成一个字符串的过程。我们可以使用struct.pack()方法来执行打包操作。该方法的参数是一个格式字符串和对应的变量,格式字符串指定了如何编码数据。例如,'i'代表一个整数,'f'代表一个浮点数。 示例: ``` import struct # 将一个整数和一个浮点数打包成一个字符串 data = struct.pack('if', 123, 3.14) print(data) ``` 输出: ``` b'{\x00\x00\x00\xcd\xcc\x0c@' ``` 2. 解包数据: 解包是将一个字符串按照指定的格式解码为多个变量的过程。我们可以使用struct.unpack()方法来执行解包操作。该方法的参数是一个格式字符串和对应的字符串,格式字符串指定了如何解码数据。 示例: ``` import struct # 将一个字符串解包为一个整数和一个浮点数 data = b'{\x00\x00\x00\xcd\xcc\x0c@' unpacked_data = struct.unpack('if', data) print(unpacked_data) ``` 输出: ``` (123, 3.140000104904175) ``` 3. 格式字符串的使用: 格式字符串可以包含多个格式说明符,每个格式说明符代表一个数据类型。常用的格式说明符有: - 'i'代表4字节整数 - 'f'代表4字节浮点数 - 's'代表一个字符串(默认为字节字符串) 可以通过添加数字来指定数据类型的大小,例如'i2'代表一个2字节的整数。还可以使用特殊字符表示数据类型的大小和对齐方式。 总之,struct模块提供了一种方便的方式来处理二进制数据。我们可以使用它来打包和解包数据,以及指定数据的格式和大小。这在网络通信、文件读写和数据存储方面都非常有用。 ### 回答3: structPython中用于处理二进制数据的模块,它提供了一些函数来处理不同类型的数据,并将其打包成二进制字符串。 使用struct模块的第一步是使用pack函数将数据打包成二进制字符串。pack函数使用一个格式化字符串来描述数据的结构,其中包含指示数据类型和其相应的大小的字符。例如,格式化字符串“i”表示一个整数,大小为4个字节。使用pack函数可以将整数打包成4个字节的二进制字符串。 接下来,我们可以使用unpack函数来解析打包后的二进制字符串,将其转换回原来的数据类型。unpack函数需要使用相同的格式化字符串来解析二进制字符串。例如,使用格式化字符串“i”,可以将4个字节的二进制字符串解析为一个整数。 此外,struct模块还提供了其他一些函数,如calcsize函数用于计算给定格式化字符串所需的字节数,以及byteorder函数用于指定字节顺序(大端或小端)。 总结起来,struct模块提供了一种方便的方法来处理二进制数据。它可以将不同类型的数据打包成二进制字符串,并将其解析为原始数据类型。这对于涉及网络编程、文件处理和底层数据交换的应用程序非常有用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值