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().
  • 1
  • 2

准确的讲,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()

python struct 模块相关推荐

  1. python struct模块的使用

    struct模块中的函数 函数 return explain pack(fmt,v1,v2-) string 按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回. pack_in ...

  2. [转载] Python: struct 模块之字节对齐问题

    参考链接: Python中的struct模块 P y t h o n Python Python 在二进制写文件时,可以用 s t r u c t struct struct 模块将数据捆绑成结构体转 ...

  3. python struct模块_python struct 模块

    struct模块用于二进制和结构体之间的互相转化,此模块中大部分函数接受一个实现了Buffer协议的对象,最常见的实现了Buffer协议的对象包括bytes.bytearray等,大多数像byte数组 ...

  4. Python - struct模块、partical模块

    #partical方法胡定函数第一个参数 #可以使用iter迭代,但是配合iter使用要指定两个参数  #struct.pack()/unpack()只打包/解包四个字节(编码ASCII,虽然是ASC ...

  5. 用python将照片做成数据集_python实战项目,struct模块的使用,将MNIST数据集转换为bmp图片...

    最近学习 tensroflow,用到了入门级的经典数据集 MNIST,MNIST 包含几万张 28x28 像素大小的手写数字.但是它的存储是以字节流的形式存储的,几万张图片存储在一个文件里.一直对其很 ...

  6. python中struct_Python的Struct模块,用法以及个人理解

    简介 python strtuct模块主要在Python中的值于C语言结构之间的转换.可用于处理存储在文件或网络连接(或其它来源)中的二进制数据. 顺序.格式字符 现在先不要看图表,稍后我们回来看.图 ...

  7. Python基础教程— Struct模块

    struct模块提供了用于在字节字符串和Python原生数据类型之间转换函数,比如数字和字符串. 该模块作用是完成Python数值和C语言结构体的Python字符串形式间的转换. 这可以用于处理存储在 ...

  8. python序列化模块struct_python的struct模块

    Python中缺少类似C语言structs这样直接对字节序列进行序列化和反序列化的语法,作为一门脚本语言这是不必要的,但作为一门完整的编程语言必须提供这样的能力,否则不能独立的处理二进制文件和数据流. ...

  9. python学习day32 黏包 struct模块

    为什么会出现黏包问题?  首先只有在TCP协议中才会出现黏包现象 是因为TCP协议是面向流的协议 在发送的数据 传输过程中 有缓存机制 来避免数据丢失 因此 在连续发送小数据的时候 以及接收大小不符的 ...

最新文章

  1. JS——“==”与“===”
  2. Log4j 日志详细用法
  3. 【计组实验】P3 Verilog多周期处理器开发 MIPS指令集
  4. JS Compress and Decompress
  5. BUAA_OO_第二单元作业总结
  6. Zabbix监控系统深度实践
  7. 一种简便的安装使用 qemu 的方法
  8. ORB-SLAM(一)简介
  9. 项目: 生命游戏(C语言)
  10. 龙芯3A3000 PCI 硬件问题
  11. 微信小程序连接蓝牙汉印HM-A300L标签打印机
  12. JS端计算一段时间内工作日的天数,排除周末和法定节假日,同时考虑到调休日
  13. Liunx 安装 phpStudy
  14. 与计算机学男生谈恋爱,和什么专业男生谈恋爱比较惨?
  15. java 线程池超时_Java定时线程池停止超时任务
  16. 扣哒世界python CS1 竞技场代码
  17. 小丑改造计划之动态规划
  18. android验证数字字母和特殊字符,正则表达式必须包含字母数字和特殊字符
  19. 灵魂碎片的收集(构造)
  20. mysql获取去年同期_mysql 查询当天、昨天、本周、上周、本月、上月、今年、去年数据...

热门文章

  1. php mysql导入表格大量数据,PHP批量导入excell表格到mysql数据库
  2. 学会这5个让人相见恨晚的PPT技巧,你也能快速做出高逼格的PPT!
  3. 知识付费如何二开分销功能
  4. 「Python与地震工程」单自由度体系求解之Newmark-β法
  5. WiFi开发|WiFi无线技术介绍
  6. 电脑屏幕老是会无视频输入怎么办
  7. 计算机连锁相关论文,毕业论文_铁路信号计算机联锁系统9喜欢就下吧(范文1)...
  8. bootmgr is conmpressed联想Z485
  9. 支架后服用药物出现严重副作用的最有效治疗方法
  10. 百度广告联盟号被封 网站被降权