2016 - 2024

感恩一路有你

Python3 struct模块的基本用法

浏览量:4550 时间:2024-01-25 15:22:31 作者:采采

大家好!今天我给大家介绍一下“struct模块的基本用法”。通过struct模块可以将数据包装成C语言类型的二进制字节流。通过这种字节流,可以非常方便地与其他语言开发的模块和程序进行二进制格式的数据交互。弥补了Python内建I/O函数只能操作字符串的不足。如果您觉得这篇教程有帮助,请为我投上宝贵的一票,谢谢!如果您对我写的系列教程感兴趣,请“关注”我吧!

启动IDLE程序

1. 必须安装Python 3后,启动IDLE程序。点击界面菜单中的“File > New File”,新建一个空白的Python源代码文件,然后保存为“study_struct_”文件。

struct模块的打包和解包

2. 在Python 3中的struct模块提供了一系列的打包和解包函数以及一个名为Struct的类。这两种方式在功能上并没有区别,你可以根据代码环境自由选择。通过函数,可以将数据按照指定的格式(请参考Python 3帮助手册,搜索“struct”)打包到字节流中。而通过struct.unpack函数,则可以将字节流中的数据按指定的格式还原为Python数据。

体验打包和解包

3. 清楚了struct模块的打包和解包用法后,接下来,可以通过代码体验一下它们的具体用法。在“study_struct_”源代码文件中,导入struct模块,然后在try…except块中添加打包Python数据的代码并输出打包后的数据。代码编写完毕后,点击F5运行程序。一切正常时,可以在Shell窗口中见到输出的结果。

4. 继续向源代码的try…except块中添加解包字节流并输出解包数据的代码,然后点击F5运行。一切正常时,可以在Shell窗口中见到解包后的数据与最初传入的数据相同,除了那个0.1535,这个实际是浮点数的误差,属于正常现象。

使用Struct类

5. Python的struct模块中同时提供了Struct类,通过该类的pack和unpack方法,同样可以打包和解包二进制数据。调用时,需要注意传入的参数类型,别跟同名的函数弄混了,它可以Struct对象。

6. 向源代码的try…except块中追加通过Struct类对象打包和解包数据的代码,然后按F5运行。核对Shell窗口中打印的数据,可以确定其结果与struct函数输出的一致。

pack_into和unpack_from函数

7. struct模块中提供了_into和struct.unpack_from函数,用于将数据打包到缓冲区(比如:array对象),以及从缓冲区中解包数据。使用pack_into函数时,需要提供一个可写的缓冲区,可以通过array模块中提供的array函数创建,在创建array对象时,可以传入一个推导列表用于设置array的长度。

8. 继续向源代码文件的try…except块中添加“打包数据到缓冲区”的测试代码。代码编写完之后,点击F5运行。在Shell窗口中,可以见到打包数据的输出结果,直接用print输出array时,它会以array的存储格式输出数据。将其转换为二进制后,输出的结果就与之前的一致了。

9. 继续向源代码文件的try…except块中添加“从缓冲区解包数据”的测试代码,然后按F5运行。在Shell窗口中,可以见到与之前输出一致的解码数据。

iter_unpack函数

模块还提供了一个以固定格式遍历解包字节流的函数iter_unpack。主要用在循环中,以固定格式解码字节流中的所有数据。

11. 继续向源代码文件的try…except块中追加“以字符格式遍历解包字节流”的代码,然后按F5运行。代码运行结束后,可以在Shell窗口中见到打印的所有字节数据。由于_unpack返回的是一个iterator,所以输出的数据格式都是iterator的格式。

总结

至此,Python中struct模块的基本用法就介绍完毕了,下一篇文章中,我会向大家介绍一下在Python中通过二进制文件与C代码进行交互的方法。敬请期待!Enjoy!~

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。