首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python模块:struct模块

使用Python模块:struct模块

作者头像
py3study
发布2020-01-13 11:10:21
1.5K0
发布2020-01-13 11:10:21
举报
文章被收录于专栏:python3python3

Python没有提供直接的将用户定义的数据类型和文件IO关联起来的功能,但是它提供了struct库(是一个内置库)——我们可以以二进制模式来写这些数据(有趣的是,它真的是设计来讲文本数据写为缓存的)


概述

1)bytes、str

bytes是Python3.x新加的数据类型(在Python2.x中被合并在str)中

这里写图片描述
这里写图片描述

bytesbyte的序列,而strunicode的序列

bytes通过decode()方法转换为str类型;str通过encode()方法转换为bytes类型

在互联网上是通过二进制进行传输,所以就需要将str通过encode()编码成bytes进行传输,而在接收中通过decode()解码成我们需要的编码进行处理数据这样不管对方是什么编码而本地是我们使用的编码这样就不会乱码

2)bytes()

bytes()是Python3的一个内置函数

英文文档:

class bytes([source[, encoding[, errors]]])

Return a new “bytes” object, which is an immutable sequence of integers in the range 0 <= x < 256. bytes is an immutable version of bytearray – it has the same non-mutating methods and the same indexing and slicing behavior.
Accordingly, constructor arguments are interpreted as for bytearray().
这里写图片描述
这里写图片描述

准确的讲,Python没有提供专门处理字节的数据类型 但由于b'str_obj'可以表示bytes_obj 所以,字节数组 <=> 二进制str

C语言中,我们可以很方便地用structunion来处理字节,以及字节和intfloat的转换

你可以使用位运算把其他数据类型转换为字节类型

这里写图片描述
这里写图片描述

但是这样不但操作麻烦,而且就上例而言对于浮点数也无能为力

3)struct模块

在Python中,『一切皆对象』,基本数据类型也不列外

C语言的数组int a[3] = {1, 2, 4};,存储的是真正的值 Python的列表lyst = [1, 2, 4],存储的是元素的指针

这里写图片描述
这里写图片描述

这就造成了『列表元素的不连续存储』,在Python中列表中的数据可能不会被存储为连续的字节块

为了处理它们,将python值转换为C结构很重要,即将它们打包成连续的数据字节,或者将一个连续的字节块分解成Python对象

struct模块执行Python和以Pythonbytes表示的C结构体之间的转换,这可以用于处理存储在文件中或来自网络连接以及其他源的二进制数据;它使用一定格式的字符串作为C语言结构布局的简洁描述以及到或从Python值的预期转换


两个函数:pack()、unpack()

struct模块最重要的两个函数就是pack()unpack()方法

打包函数:pack(fmt, v1, v2, v3, ...)

解包函数:unpack(fmt, buffer)

其中,fmt是格式字符(format的谐音),struct模块支持的格式化字符如下表

这里写图片描述
这里写图片描述

pack()函数

写个文件简单测试下

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

unpack()函数

使用unpack()函数从写好的二进制文件中读出文件

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

先用二进制编辑器随便写一个文件

这里写图片描述
这里写图片描述

然后调用struct模块的unpack()函数读取数据

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

可以看到,同样的一个文件读取方式不同,输出的结果也就不同

在文件操作结束后,不要忘了file.close()

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 两个函数:pack()、unpack()
    • pack()函数
      • unpack()函数
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档