python处理binary文件的基本流程如下:
TrainLabelFileName = r'/home/yml/桌面/mnist/train-labels.idx1-ubyte'
TLbinfile = open(TrainLabelFileName,'rb')
TLbuf = TLbinfile.read()
对与buffer做一些处理
TLbinfile.close
而对应binary buffer的处理,可以考虑使用python提供的struct模块。struct是python的库,可以用来处理binary data,这些data可能来自文件,网络连接或是其他的地方,也可以处理原本使用C语言结构体描述的复杂信息。
struct提供多个处理函数:
Index | 函数 | 描述 | |
1 | struct. pack (format, v1, v2, ...) | 将v1,v2...按照format格式打包并返回 | |
2 | struct. pack_into (format, buffer, offset, v1, v2, ...) | 将v1,v2....按照format格式打包,并写入到buffer的offset地方 | |
3 | struct. unpack (format, buffer) | 按照format格式解析buffer,并返回,返回值是一个tuple类型,可以通过calcsize()来计算长度 | |
4 | struct. unpack_from (format, buffer, offset=0) | 按照format格式解析buffer的制定偏移,,返回值是一个tuple类型,可以通过calcsize()来计算长度 | |
5 | struct.iter_unpack(format,buffer) | ||
6 | struct.calcsize(format) | 计算format格式所需的字节长度 |
format格式
struct的format格式包括两个部分:编码标识和格式标识
编码标识包括字节序,大小和对齐方式
注意:
- native byte order表示跟随系统的配置,python可以使用sys.byteorder来获取到大小端格式;
- native size and alignment表示根据C编译器的sizeof的操作
- standard size依赖于格式字符中指定的情况
- 可以没有编码标识,默认为@
格式标识:
注意:
'IIII' = '4I' = '@4I'
https://blog.csdn.net/putiancaijunyu/article/details/86021969
具体使用实例请参考
参考文献