Python二进制文件读取并转换
文章目录
Python二进制文件读取并转换
标签(空格分隔): python
[toc]
本文所用环境: Python 3.6.5 |Anaconda custom (64-bit)|
引言
由于某些原因,需要用python读取二进制文件,这里主要用到struct包,而这个包里面的方法主要是unpack、pack、calcsize。详细介绍可以看:Python Struct 官方文档。这里主要讨论,python二进制转浮点数的操作。
python中一个float类型的数占4个字节。 二进制数据转float,可以用struct.unpack()来实现。
小文件读取
较小的文件,可以一次读取:
首先导入所需的包:
|
|
例如:我需要读取一个名为filename,存放着形状为[100,1025]的浮点数的文件。可以采用以下办法
|
|
大文件处理方法
我需要处理的文件大小有38.1G,存放着[10000000,1025]大小的向量。 关于大文件的处理,我参考了这位博主的文章-强悍的 Python —— 读取大文件,前两种方法都会造成MemoryError。第三种不会,但是,这个方法不能很好的将二进制文件转换成浮点数。
所以我想到了另外一种办法:
通过Linux命令切割文件
通过split命令将38.1G的文件按照指定大小切割,
|
|
上述代码的意思是,指定每块大小为820000k,-a 2代表2位数命名,‘data_’代表前缀是’data_' 最终生成49个文件(字典序 aa - bw),前48个文件每个204800行 最后一个文件 169600行 $$ 820000 = 4_1025_204800/1024 $$
通过python循环读取文件
首先构建词汇表:
|
|
为了方便读取,将49个二进制文件转换成numpy专用二进制格式*.npy
|
|