资讯专栏INFORMATION COLUMN

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

Elle / 3486人阅读

摘要:简介模块主要在中的值于语言结构之间的转换。可用于处理存储在文件或网络连接或其它来源中的二进制数据。顺序格式字符现在先不要看图表,稍后我们回来看。图片来自官网例子用例子说明效果是最好的,我们用特定格式往二进制文件里写入数据,然后再读出数据。

简介

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:UsersmatzohDesktop	est.bin", "rb+")

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

file.seek(0)

strBin = file.read()
print(strBin) # b"muyucoderx00x00x00xe2x07x00x00"

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"muyucoderx00x00x00xe2x07x00x00"
(b"muyu", b"coder", 2018)

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

拓展

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

感谢

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44656.html

相关文章

  • Python格式化时间

    摘要:如我们有字符串,如何将它转换为对象呢的用法的作用是格式化时间格式,使其按照我们想要的格式来显示。如下例,先将字符串解析为对象,然后在格式化时间输出,将其输出按照的格式输出。 datetime简介 datetime和time的区别 time在 Python 文档里,time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操...

    Cc_2011 评论0 收藏0
  • Python 调用 C 动态链接库,包括结构体参数、回调函数等

    摘要:调用以回调函数地址为参数的函数这个主题就稍微绕一些了,也就是说在接口中,需要传入回调函数作为参数。这个问题在中也可以解决,并且回调函数可以用定义。代码代码很简单回调函数的传入参数为,返回参数也是。 项目中要对一个用 C 编写的 .so 库进行逻辑自测。这项工作,考虑到灵活性,我首先考虑用 Python 来完成。 研究了一些资料,采用 python 的 ctypes 来完成这项工作。已经...

    NickZhou 评论0 收藏0
  • python大佬养成计划----os,datetime,time模块补充

    摘要:是否则检验指定的对象是否存在。由于的模块实现主要调用库,所以各个平台可能有所不同。时间格式时间戳的方式通常来说,时间戳是指格林威治时间年月日时分秒北京时间年月日时分秒起至现在的总秒数。元组方式元组共有个元素,返回的函数主要有,,。 os模块 os模块提供了多数操作系统的功能接口函数。当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,...

    frank_fun 评论0 收藏0
  • 我是如何入门机器学习

    摘要:在这里我分享下我个人入门机器学习的经历,希望能对大家能有所帮助。相关学习链接,,入门后的体验在入门了机器学习之后,在实际工作中,绝大多数的情况下你并不需要去创造一个新的算法。 机器学习在很多眼里就是香饽饽,因为机器学习相关的岗位在当前市场待遇不错,但同时机器学习在很多人面前又是一座大山,因为发现它太难学了。在这里我分享下我个人入门机器学习的经历,希望能对大家能有所帮助。 PS:这篇文章...

    ShowerSun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<