struct是Python中的内建模块,用来在C语言中的结构体与Python中的字符串之间进行转换,数据一般来自文件或网络

1. 功能

  (1) 按照指定格式将Python数据转换为字符串(该字符串为字节流)

  (2) 按照指定格式将字节流转换为Python指定的数据类型

  (3) 处理二进制数据,如果用struct来处理文件的话,需要用‘wb’/'rb'以二进制写,读的方式来处理文件

  (4) 处理C语言中的结构体

2. struct常用方法

  (1) pack(fmt, v1, v2, ...) -> bytes

       按照给定的格式将数据转换成字符串(字节流)

  (2) pack_into(fmt, buffer, offset, v1, v2, ...)

       按照给定的格式将数据转换成字符串(字节流),并将字节流写入以offset开始的buffer中

  (3) unpack(fmt, buffer) -> (v1, v2, ...)

       按照给定的格式解析字节流并返回结果

  (4) unpack_from(fmt, buffer, offset=0) -> (v1, v2, ...)

       按照指定的格式解析以offset开始的缓冲区并返回解析结果

  (5) calcsize(fmt) -> integer

       计算给定的格式占多少字节的内存,注意对齐方式

3. 格式符

  格式化字符串:指定数据类型、控制字节顺序、大小和对齐方式

  下面2张表来自官网

Character Byte order Size Alignment
@ native native 凑够4字节
= native standard 按原字节数
< little-endian standard 按原字节数
> big-endian standard 按原字节数
! network (= big-endian) standard 按原字节数
Format C Type Python type Standard size Notes
x pad byte no value    
c char string of length 1 1  
b signed char integer 1 (3)
B unsigned char integer 1 (3)
? _Bool bool 1 (1)
h short integer 2 (3)
H unsigned short integer 2 (3)
i int integer 4 (3)
I unsigned int integer 4 (3)
l long integer 4 (3)
L unsigned long integer 4 (3)
q long long integer 8 (2), (3)
Q unsigned long long integer 8 (2), (3)
f float float 4 (4)
d double float 8 (4)
s char[] string    
p char[] string    
P void * integer   (5), (3)

4. 示例

#coding=utf-8
''' struct实现二进制文件的读写 ''' import sys
import struct def writefile(path):
name = b"zhanglin"
age = 30
sex = b"female"
profession = b"IT" try:
with open(path, "wb") as pf:
text = struct.pack(">8si6s2s", name,age,sex,profession)
pf.write(text)
print ("write file success!")
except Exception as e:
print ("write file faild!:",e) def readfile(path):
text = None
try:
with open(path, "rb") as pf:
text = pf.read()
print ("read file success!")
print (text)
print (struct.unpack(">8si6s2s", text))
except Exception as e:
print ("read file faild!:",e) if __name__ == "__main__":
path = sys.argv[1]
writefile(path)
readfile(path) 输出结果:
  
>>> D:\Pystu>python struct_test.py struct_test.txt
  >>> write file success!
  >>> read file success!
  >>> b'zhanglin\x00\x00\x00\x1efemaleIT'
  >>> (b'zhanglin', 30, b'female', b'IT')
 

Python之struct的更多相关文章

  1. Python使用struct处理二进制

    有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重 ...

  2. Python学习——struct模块的pack、unpack示例

    he struct module includes functions for converting between strings of bytes and native Python data t ...

  3. c语言write与python的struct模块交互

    以下讲的都是用二进制形式打开文件.网上有很多struct模块的文章,下面是我做的小实验. 1.对于c里面的fwrite写入一个单字节,写的就是它的二进制.如3,写入文件就是二进制0x03,它并不是3的 ...

  4. python中struct模块及packet和unpacket

    转自:http://www.cnblogs.com/gala/archive/2011/09/22/2184801.html 我们知道python只定义了6种数据类型,字符串,整数,浮点数,列表,元组 ...

  5. python 中 struct 用法

    下面就介绍这个模块中的几个方法. struct.pack():我的理解是,python利用 struct模块将字符(比如说 int,long ,unsized int 等)拆成 字节流(用十六进制表示 ...

  6. Python使用struct处理二进制(pack和unpack用法)

    转载自:http://www.cnblogs.com/gala/archive/2011/09/22/2184801.html 这篇文章写的很好,所以无耻的转了.. 有的时候需要用python处理二进 ...

  7. Python采用struct处理二进制

    有时需要使用python二进制数据,实例,件.socket操作时.这时候.能够使用python的struct模块来完毕.能够用 struct来处理c语言中的结构体. struct模块中最重要的三个函数 ...

  8. [Python]ctypes+struct实现类c的结构化数据串行处理

    1. 用C/C++实现的结构化数据处理 在涉及到比较底层的通信协议开发过程中, 往往需要开发语言能够有效的表达和处理所定义的通信协议的数据结构. 在这方面是C/C++语言是具有天然优势的: 通过str ...

  9. 【转】在Python的struct模块中进行数据格式转换的方法

    这篇文章主要介绍了在Python的struct模块中进行数据格式转换的方法,文中还给出了C语言和Python语言的数据类型比较,需要的朋友可以参考下 Python是一门非常简洁的语言,对于数据类型的表 ...

  10. python之struct详解

    python之struct详解 2018-05-23 18:20:29 醉小义 阅读数 20115更多 分类专栏: python   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议 ...

随机推荐

  1. 如何判断某String是否经过urlEncoder.encode过

    import java.util.BitSet; public class UrlEncoderUtils { private static BitSet dontNeedEncoding; stat ...

  2. Mybatis中的ParameterType

    mybatis可以传入的参数类型1.基本数据类型       可以通过#{参数名}直接获取.每次只能传入一个值       <select id="selectTeacher" ...

  3. Linux:redhat6.5使用yum时提示需要注册问题解决方案

    Linux:redhat6.5使用yum时提示需要注册问题解决方案 一.问题 新安装了redhat6.5.安装后,登录系统,使用yum时候.提示: This system is not registe ...

  4. Apache 访问控制

    Apache访问控制 通过设置访问控制,可对网站进行权限管理,提高安全性. 参数介绍 <Directory />: 行为对根目录的限制 Options:允许使用控制目录特征的指令.他们包括 ...

  5. Ubuntu 14.04上架IPSec+L2TP的方法

    最简单的方法是使用脚本一步一步地进行配置.我用的是philplckthun写的脚本,修改了一下获取服务器IP的方法:脚本文件. 在ubuntu下运行: sh setup.sh 配置配置完成后,服务器端 ...

  6. qss 样式不生效--注释不能嵌套

    qss 兼容 css 调qt样式的时候出现一个很奇怪的问题 删掉注释掉的内容 样式正常,不删注释 ,注释后面的样式全部失效.有点困惑的是: 感觉很困惑,后来发现里面有行中文注释,删掉中文注释就行了,以 ...

  7. 实验三 敏捷开发与XP实践 实验报告 20162305李昱兴

    实验三 敏捷开发与XP实践 实验报告 20162305 一.什么是敏捷开发与XP 敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法.敏捷开发以用户的需求进化为核 ...

  8. 正式学习React(四) ----Redux源码分析

    今天看了下Redux的源码,竟然出奇的简单,好吧.简单翻译做下笔记: 喜欢的同学自己可以去github上看:点这里 createStore.js import isPlainObject from ' ...

  9. Qt性能问题

    使用Qt库开发通信上位机软件,如串口.CAN总线等,涉及到接收界面高速刷新,会使CPU消耗率过高(20%以上),可能还会卡顿. 具体原因不知道,突然想放弃Qt了 ps: 1.问题出在界面刷新,会占据C ...

  10. idea setting

    input