前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Python模块:struct模块

使用Python模块:struct模块

作者头像
py3study
发布于 2020-01-13 03:10:21
发布于 2020-01-13 03:10:21
1.7K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

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]]])

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python学习笔记7.5-内建模块struct
Python中变量的类型只有列表、元祖、字典、集合等高级抽象类型,并没有像c中定义了位、字节、整型等底层初级类型。因为Python本来就是高级解释性语言,运行的时候都是经过翻译后再在底层运行。如何打通
锦小年
2018/01/02
7600
struct:Python二进制数据结构
在C/C++语言中,struct被称为结构体。而在Python中,struct是一个专门的库,用于处理字节串与原生Python数据结构类型之间的转换。 本篇,将详细介绍二进制数据结构struct的使用方式。
luckpunk
2023/09/29
3300
struct:Python二进制数据结构
一文学会Python标准库struct序列化与反序列化
使用Python标准库struct序列化Python整数、实数、字节串时,需要使用struct模块的pack()函数把对象按指定的格式进行序列化,然后使用文件对象的write()方法将序列化的结果字节串写入以'wb'或'ab'模式打开的二进制文件。读取时需要使用文件对象的read()方法从以'rb'模式打开的二进制文件中读取指定数量的字节串,然后再使用struct模块的unpack()函数反序列化得到原来对象息。如果需要的话,可以使用calcsize()函数计算指定类型序列化时所需要的字节数量。标准库struct中常用的函数及功能下表所示。
Python小屋屋主
2020/02/24
1.4K0
Python之struct简介
       看到struct这么英文单词,大家应该并不陌生,因为c/c++中就有struct,在那里struct叫做结构体。在Python中也使用struct,这充分说明了这个struct应该和c/c++中的struct有很深的渊源。Python正是使用struct模块执行Python值和C结构体之间的转换,从而形成Python字节对象。它使用格式字符串作为底层C结构体的紧凑描述,进而根据这个格式字符串转换成Python值。
py3study
2020/01/09
1.8K0
python| struct 模块
最近研究了一下python 解析MySQL binlog 文件的内容,binlog是二进制存储,python如何解析成我们能读懂的语言呢?答案就是 struct 模块用于 Python 值和用 Python 字节对象表示的 C 结构体之间的转换,可以处理存储在文件,网络或者其他数据源的二进制数据。
用户1278550
2020/06/23
6780
Python中struct.pack()和struct.unpack()用法
python中的struct主要是用来处理C结构数据的,读入时先转换为Python的字符串类型,然后再转换为Python的结构化类型,比如元组(tuple)啥的~。一般输入的渠道来源于文件或者网络的二进制流。
周小董
2019/03/25
16.7K2
Python中struct.pack()和struct.unpack()用法
Python之struct
  (3) 处理二进制数据,如果用struct来处理文件的话,需要用‘wb’/’rb’以二进制写,读的方式来处理文件
全栈程序员站长
2022/07/14
4970
Day19内建模块struct&hashlib&hmac
struct Python提供了一个struct模块来解决bytes和其他二进制数据类型的转换。 struct的pack函数把任意数据类型变成bytes: >>> bs = bytes([b1,b2,b3,b4]) >>> bs b'\x00\x9c@c' pack的第一个参数是处理指令,'>I'的意思是: >表示字节顺序是big-endian,也就是网络序,I表示4字节无符号整数。 后面的参数个数要和处理指令一致。 unpack把bytes变成相应的数据类型: >>> struct.unpack(
林清猫耳
2018/04/26
8310
Day19内建模块struct&hashlib&hmac
一篇文章带你剖析Python 字节流处理神器struct
struct是用来解决bytes和其他二进制数据类型的转换的模块,它使得流的操作变得非常简单,完美解决了Python没有字节数据类型的尴尬。
Python进阶者
2020/07/02
2.9K0
使用python 实现icmp测试主机存
import os, sys, socket, struct, select, time
py3study
2020/01/11
8800
Python中对字节流/二进制流的操作:struct模块简易使用教程
前言 前段时间使用Python解析IDX文件格式的MNIST数据集,需要对二进制文件进行读取操作,其中我使用的是struct模块。查了网上挺多教程都写的挺好的,不过对新手不是很友好,所以我重新整理了一些笔记以供快速上手。 注:教程中以下四个名词同义:二进制流、二进制数组、字节流、字节数组 快速上手 在struct模块中,将一个整型数字、浮点型数字或字符流(字符数组)转换为字节流(字节数组)时,需要使用格式化字符串fmt告诉struct模块被转换的对象是什么类型,比如整型数字是'i',浮点型数字是'f',一个
用户1332428
2018/03/09
3K0
Python中对字节流/二进制流的操作:struct模块简易使用教程
struct.pack
最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结。
andrew_a
2019/07/30
1.6K0
struct.pack
Python学习——struct模块的pack、unpack示例
[work@db-testing-com06-vm3.db01.baidu.com python]$ python struct_pack.py
阳光岛主
2019/02/20
2.3K0
Python标准库笔记(6) — struct模块
目录[-] 该模块作用是完成Python数值和C语言结构体的Python字符串形式间的转换。这可以用于处理存储在文件中或从网络连接中存储的二进制数据,以及其他数据源。 用途: 在Python基本数据类型和二进制数据之间进行转换 struct模块提供了用于在字节字符串和Python原生数据类型之间转换函数,比如数字和字符串。 模块函数和Struct类 它除了提供一个Struct类之外,还有许多模块级的函数用于处理结构化的值。这里有个格式符(Format specifiers)的概念,是指从字符串格式
jhao104
2018/03/20
1.3K0
Python基础之:struct和格式化字符
文件的存储内容有两种方式,一种是二进制,一种是文本的形式。如果是以文本的形式存储在文件中,那么从文件中读取的时候就会遇到一个将文本转换为Python中数据类型的问题。实际上即使是文本的形式存储,存储的数据也是也是有结构的,因为Python底层是用C来编写的,这里我们也称之为C结构。
程序那些事
2021/04/16
9350
python struct模块_Python struct模块
有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体.
用户7886150
2020/12/22
1.6K0
47.python bytearray/bytes/string区别
在讲解 bytearray / bytes / string 三者的区别之前,有必要来了解一下字节和字符的区别:
猿说编程[Python和C]
2020/03/12
2K0
用struct模块实现python so
最近跳槽到西安一家机器人公司,我们的产品属于教育机器人的范畴,为了增强客户吸引力,引进了一个智能家居公司的产品API接口,让机器人来操作智能家居
py3study
2020/01/07
6240
python网络-TFTP客户端开发(25)
TFTP(Trivial File Transfer Protocol,简单文件传输协议)
Se7eN_HOU
2019/09/11
2.4K0
python网络-TFTP客户端开发(25)
RPC(四)
Adopt the pace of nature, her secret is patience.
小闫同学啊
2019/07/18
1.3K0
RPC(四)
相关推荐
python学习笔记7.5-内建模块struct
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验