Python之struct

1.功能(1)按照指定格式将Python数据转换为字符串(该字符串为字节流)(2)按照指定格式将字节流转换为Python指定的数据类型(3)处理二进制数据,如果用struct来处理文件的

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120204.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • atof函数_log函数怎么比较大小

    atof函数_log函数怎么比较大小atof函数原型doubleatof(constchar*str);作用:将字符串转换为双精度浮点数(double).头文件:#include&lt;stdlib.h&gt;返回值: 返回转换后的浮点数,如果字符串str不能被转换为double,那么返回0.0函数说明:atof()会扫描茶树str字符串,跳过前面的空格字符,直到遇到数字或者正…

    2022年10月22日
    0
  • microbiomeViz:绘制lefse结果中Cladogram「建议收藏」

    microbiomeViz:绘制lefse结果中Cladogram「建议收藏」平日经常会分析shotgun宏基因组的数据,我们的pipeline使用MetaPhlAn,Kraken等profiler。这种数据经常会产生一个表格,如下download.file(“https://bitbucket.org/biobakery/biobakery/raw/tip/demos/biobakery_demos/data/metaphlan2/output/SRS014459-Stool_profile.txt”,’SRS014459-Stool_profile.txt’)knitr

    2022年5月18日
    39
  • kafka 集群搭建步骤

    kafka 集群搭建步骤  kafka集群的运行建立在zookeeper基础上,kafka中的消息偏移量信息、kafka集群信息、topic等信息会被存储在zookeeper中。高版本的kafka自带了zookeeper,本文使用独立的zookeeper集群部署kafka集群。前期准备见《Linux环境下,搭建ZooKeeper集群》。一、下载kafka  kafka官网:http://kafka.apache.org/http://kafka.apache.org/downloa

    2022年4月30日
    38
  • SqlTransaction——事务详解[通俗易懂]

    SqlTransaction——事务详解[通俗易懂]Postedon2008-07-2001:46停留的风http://www.cnblogs.com/yank/archive/2008/07/20/1246896.html事务处理基本原理           事务是将一系列操作作为一个单元执行,要么成功,要么失败,回滚到最初状态。在事务处理术语中,事务要么提交,要么中止。若要提交事务,所有参与者都必须保证对数据

    2022年6月10日
    42
  • gateway网关的作用_gateway网关限流

    gateway网关的作用_gateway网关限流Gateway服务网关SpringCloudGateway是SpringCloud的一个全新项目,该项目是基于Spring5.0,SpringBoot2.0和ProjectReactor等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。为什么需要网关Gateway网关是我们服务的守门神,所有微服务的统一入口。网关的核心功能特性: 请求路由 权限控制 限流 架构图:权限控制

    2022年10月11日
    0
  • c#实战教程_ps初学者入门视频

    c#实战教程_ps初学者入门视频C#基础教程-c#实例教程,适合初学者。第一章 C#语言基础本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠一章的内容就完全掌握C#语言是不可能的,如需进一步学习C#语言,还需要认真阅读有关C#语言的专著。1.1 C#语言特点Microsoft.NET(以下简称.NET)框…

    2022年9月10日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号