我的机器学习教程「美团」算法工程师带你入门机器学习  以及 「三分钟系列」数据结构与算法  已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年的算法知识,简单易懂,也将是我实体书的BLOG版。

欢迎大家扫码关注微信公众号「图灵的猫」,除了有更多AI、算法、Python相关文章分享,还有免费的SSR节点和外网学习资料。其他平台(微信/知乎/B站)也是同名「图灵的猫」,不要迷路哦~

struct是python(包括版本2和3)中的内建模块,它用来在c语言中的结构体与python中的字符串之间进行转换,数据一般来自文件或者网络。

常用方法

struct.pack(fmt,v1,v2,…)

返回的是一个字符串,是参数按照fmt数据格式组合而成。

struct.unpack(fmt,string)

按照给定数据格式解开(通常都是由struct.pack进行打包)数据,返回值是一个tuple

格式符

下面2张表来自官网

Character Byte order Size Alignment
@ native native native
= native standard none
< little-endian standard none
> big-endian standard none
! network (= big-endian) standard none
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)

实例

理论性的东西看起来都比较枯燥,来个实例代码就容易理解多了。本例来实现往一个2进制文件中按照某种特定格式写入数据,之后再将它读出。相信通过这个理例子,你就能基本掌握struct的使用。

# -*- coding: utf-8 -*-
__author__ = 'djstava''''
数据格式为
姓名 年龄 性别   职业
lily 18  female teacher
'''import os
import structfp = open('test.bin','wb')# 按照上面的格式将数据写入文件中
# 这里如果string类型的话,在pack函数中就需要encode('utf-8')
name = b'lily'
age = 18
sex = b'female'
job = b'teacher'# int类型占4个字节
fp.write(struct.pack('4si6s7s', name,age,sex,job))
fp.flush()
fp.close()# 将文件中写入的数据按照格式读取出来
fd = open('test.bin','rb')
# 21 = 4 + 4 + 6 + 7
print(struct.unpack('4si6s7s',fd.read(21)))
fd.close()

运行上面的代码,可以看到读出的数据与写入的数据是完全一致的。

/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/djstava/Playground/flaskPy/test.py
(b'lily', 18, b'female', b'teacher')Process finished with exit code 0

参考资料

1、https://docs.python.org/2/library/struct.html

python中的struct相关推荐

  1. python中的struct模块

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

  2. python中pack函数,python中struct.pack()函數和struct.unpack()函數

    python中的struct主要是用來處理C結構數據的,讀入時先轉換為Python的字符串類型,然后再轉換為Python的結構化類型,比如元組(tuple)啥的~.一般輸入的渠道來源於文件或者網絡的二 ...

  3. 三步解决C语言中struct字节对齐问题,Python进阶篇-struct字节对齐问题

    Python进阶篇-struct字节对齐问题 Python进阶篇-struct字节对齐问题 Python调用C的时候,会传递一些复杂的数据结构,例如结构体,这时候就会遇到各种各样字节对齐的问题.下边所 ...

  4. python中pack函数_关于pack()函数的文章推荐10篇 - pack

    php读写二进制文件可以使用pack和unpack函数. 今天要处理一个二进制文件的问题,所以需要用一下,特意了解一下pack的用法,unpack用法与此类似. 简单来说,pack函数就是给一个目标格 ...

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

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

  6. python中pack什么意思_Python struct.pack如何理解其原理

    def setUTF(self, value): """ """ tag = '>h' if self.endian == HIGHT ...

  7. python中struct.unpack的用法

    python中struct.unpack的用法 4/25/2009 12:18:21 PM Python中按一定的格式取出某字符串中的子字符串,使用struck.unpack是非常高效的. 1. 设置 ...

  8. python中struct time_Python之time模块

    在开始之前,首先要说明这几点: 在Python中,通常有这几种方式来表示时间:1)时间戳(timestamp) 2)格式化的时间字符串(format_string) 3)结构化时间(struct_ti ...

  9. python中json dumps_python中json.loads,dumps,jsonify使用

    search_info = {'id':132,'user_role':3} print type(search_info) #输出 #转为string用dumps print type(json.d ...

  10. 在Python中创建单例

    这个问题不是为了讨论是否需要单例设计模式 ,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式. 在这种情况下,我定义"最pytho ...

最新文章

  1. ASP.net随机数应用实例
  2. 如何解决90%的问题?10位阿里大牛公布方法
  3. 【转载】FAT32文件系统详解
  4. Wannafly交流赛1: C. 腰带图(瞎搞)
  5. request获取各种路径
  6. @font-face 字体图标的应用
  7. linux压缩命令常用:tar,tgz,gzip,zip,rar
  8. 扣费克星 1.72 更新说明
  9. 仿钉钉流程设计(.net工作流)之普通流程模板配置
  10. thinkpad T580加装内存条
  11. PyCharm获取csv文件
  12. google浏览器安装视频插件的方法
  13. 动态规划从入门到放弃【1】
  14. 这些程序员搞笑段子,看了真的笑skr人!
  15. 职场人需要的2大礼物
  16. C++解决《无重复字符的最长子串》问题(滑动窗口(unordered_set),string)
  17. 网页设计作业——小米商城官网首页(1页) HTML+CSS+JavaScript web期末作业设计网页_清新淡雅个人网页大学生网页设计作业成品
  18. 梅西:世界杯是我最重要的奖杯;很高兴斯卡洛尼能够续约
  19. 几款开源的ETL工具及ELT初探
  20. 【音乐理论】音与音高 ( 音区 | 小字一组 | 小字组 | 大字组 )

热门文章

  1. linux service start|stop|restart
  2. 与走在创业路上的学子交流——记网维“海大快点”创业团队
  3. EF直接更新数据(不需查询)
  4. SQL导入/导出Excel
  5. Android开发中图表的使用
  6. (PPT素材)扁平图标、PNG免抠图小图片
  7. [JLOI2008] CODES
  8. jQuery图片垂直滚动焦点图
  9. Akka-Cluster(0)- 分布式应用开发的一些想法
  10. PAT甲题题解-1124. Raffle for Weibo Followers-模拟,水题