知识点 - struct模块

软硬件环境

  • python3
  • struct

简介

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

常用方法

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

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

struct.unpack(fmt,string)

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

格式符

下面2张表来自官网

实例

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

# -*- coding: utf-8 -*-
__author__ = 'cmz'

'''
数据格式为
姓名 年龄 性别   职业
cmz 18  male teacher
'''

import os
import struct

fp = open('test.bin','wb')

# 按照上面的格式将数据写入文件中
# 这里如果string类型的话,在pack函数中就需要encode('utf-8')
name = b'cmz'
age = 18
sex = b'male'
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()

运行结果

(b'cmz\x00', 18, b'male\x00\x00', b'teacher')

 

例子2

import struct
res = struct.pack('i',1230)
print(res,type(res),len(res))

obj=struct.unpack('i',res)
print(len(obj))
print(type(obj))
print(obj)
print(obj[0]) # 还原回来的是一个数组,且index = 0是数据。索要要取obj[0]

res=struct.pack('i',120000)
res=struct.pack('l',11123230)
print(res,len(res))

 

运行结果

b'\xce\x04\x00\x00' <class 'bytes'> 4
1
<class 'tuple'>
(1230,)
1230
b'\x1e\xba\xa9\x00' 4

 

 

 

posted @ 2018-02-27 17:16  Love_always_online  阅读(193)  评论(0编辑  收藏  举报