Python之struct
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的更多相关文章
- Python使用struct处理二进制
有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重 ...
- Python学习——struct模块的pack、unpack示例
he struct module includes functions for converting between strings of bytes and native Python data t ...
- c语言write与python的struct模块交互
以下讲的都是用二进制形式打开文件.网上有很多struct模块的文章,下面是我做的小实验. 1.对于c里面的fwrite写入一个单字节,写的就是它的二进制.如3,写入文件就是二进制0x03,它并不是3的 ...
- python中struct模块及packet和unpacket
转自:http://www.cnblogs.com/gala/archive/2011/09/22/2184801.html 我们知道python只定义了6种数据类型,字符串,整数,浮点数,列表,元组 ...
- python 中 struct 用法
下面就介绍这个模块中的几个方法. struct.pack():我的理解是,python利用 struct模块将字符(比如说 int,long ,unsized int 等)拆成 字节流(用十六进制表示 ...
- Python使用struct处理二进制(pack和unpack用法)
转载自:http://www.cnblogs.com/gala/archive/2011/09/22/2184801.html 这篇文章写的很好,所以无耻的转了.. 有的时候需要用python处理二进 ...
- Python采用struct处理二进制
有时需要使用python二进制数据,实例,件.socket操作时.这时候.能够使用python的struct模块来完毕.能够用 struct来处理c语言中的结构体. struct模块中最重要的三个函数 ...
- [Python]ctypes+struct实现类c的结构化数据串行处理
1. 用C/C++实现的结构化数据处理 在涉及到比较底层的通信协议开发过程中, 往往需要开发语言能够有效的表达和处理所定义的通信协议的数据结构. 在这方面是C/C++语言是具有天然优势的: 通过str ...
- 【转】在Python的struct模块中进行数据格式转换的方法
这篇文章主要介绍了在Python的struct模块中进行数据格式转换的方法,文中还给出了C语言和Python语言的数据类型比较,需要的朋友可以参考下 Python是一门非常简洁的语言,对于数据类型的表 ...
- python之struct详解
python之struct详解 2018-05-23 18:20:29 醉小义 阅读数 20115更多 分类专栏: python 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议 ...
随机推荐
- python3:利用smtplib库和smtp.qq.com邮件服务器发送邮件
python3:利用smtplib库和smtp.qq.com邮件服务器发送邮件 使用qq的邮件服务器需要注意的两个地方主要是: 1.协议问题 使用465端口 SSL 协议 2.口令问题 出现SMTPA ...
- WIN7下PHP无法开启CURL,终极解决方案
常规做法: 1)extension=php_curl.dll之外 2)把libeay32.dll.ssleay32.dll.php_curl.dll复制到C:\Windows\SysWOW64目录下 ...
- MySQL java连接被拒绝:java.sql.SQLException: Access denied for user 'root'@'****' (using password: YES)
//系统运行出现错误:java.sql.SQLException: Access denied for user 'root'@'***.**.**.**' (using password: YES) ...
- 关于 Content-Type:application/x-www-form-urlencoded 和 Content-Type:multipart/related(转)
最近项目中用到的一个是用一个页面接收c程序post过来的一断字符串..总接收不到值... 我用C#写一个测试可以正常接收到值. 最后抓包比较 区别只是 Content-Type:application ...
- Eclipse 启动tomcat 访问主页报错404
问题 tomcat用startup.sh启动,访问localhost:8080能正常访问,用Eclipse service启动tomcat,访问localhost:8080报错404 解决方法 1. ...
- ubuntu 支持中文
1.cat /usr/share/i18n/SUPPORTED 说明:查看系统支持的字符集,你需要注意的是支持字符集的格式,如对中文会有以下一些显示(我的系统如此,我不知是否普遍) zh_CN.GB1 ...
- PHPAdmin的安装和配置
phpadmin是用于管理mysql数据库的一个产品,,毕竟很多数据库服务器不能够公开连接,所以只能够使用http的方式来进行连接管理. 下载phpadmin( http://xj-http. ...
- Java socket - 使用代理服务器
为什么使用代理服务器不需要多说了. 使用Proxy Java提供了Proxy类实现使用代理进行通信. Proxy类的构造器Proxy(Proxy.Type type, SocketAddress sa ...
- React菜鸟食谱
JSX 用小括号包裹代码防止分号自动插入的bug,用大括号包裹里面的表达式 切记你使用了大括号包裹的 JavaScript 表达式时就不要再到外面套引号了.JSX 会将引号当中的内容识别为字符串而不是 ...
- poj32072-sat模板题
tarjan扫一遍后直接判断 最关键的地方就是建边(x[i] <= x[j] && y[i] >= x[j] && y[i] <= y[j]) || ...