Python二进制文件读取并转换为浮点数详解


Posted in Python onJune 25, 2019

本文所用环境:

Python 3.6.5 |Anaconda custom (64-bit)|

引言

由于某些原因,需要用python读取二进制文件,这里主要用到struct包,而这个包里面的方法主要是unpack、pack、calcsize。详细介绍可以看:Python Struct 官方文档。这里主要讨论,python二进制转浮点数的操作。

python中一个float类型的数占4个字节。

二进制数据转float,可以用struct.unpack()来实现。

小文件读取

较小的文件,可以一次读取:

首先导入所需的包:

import numpy as np
import struct
Python

例如:我需要读取一个名为filename,存放着形状为[100,1025]的浮点数的文件。可以采用以下办法

# 加载测试数据
f = open('filename','rb')
# 102500为文档中包含的数字个数,而一个浮点数占4个字节
data_raw = struct.unpack('f'*102500,f.read(4*102500))
f.close()
verify_data = np.asarray(verify_data_raw).reshape(-1,1025)

大文件处理方法

我需要处理的文件大小有38.1G,存放着[10000000,1025]大小的向量。

Python二进制文件读取并转换为浮点数详解

关于大文件的处理,我参考了这文章,但是,这个方法不能很好的将二进制文件转换成浮点数。

所以我想到了另外一种办法:

通过Linux命令切割文件

通过split命令将38.1G的文件按照指定大小切割,

split -b 820000k -a 2 filename data_

上述代码的意思是,指定每块大小为820000k,-a 2代表2位数命名,‘data_'代表前缀是'data_'

最终生成49个文件(字典序 aa ? bw),前48个文件每个204800行 最后一个文件 169600行

Python二进制文件读取并转换为浮点数详解

通过python循环读取文件

首先构建词汇表:

voc = ['a','b','c','d','e','f','g','h','i','j','k','l',
'm','n','o','p','q','r','s','t','u','v','w','x',
'y','z']
voc_short = ['a','b','c','d','e','f','g','h','i','j','k','l',
'm','n','o','p','q','r','s','t','u','v']

为了方便读取,将49个二进制文件转换成numpy专用二进制格式*.npy

for i in voc:
data_name = 'data_a'+str(i)
f = open(data_name,'rb')
data_raw = struct.unpack('f'*209920000,f.read(4*209920000))
f.close()
data = np.asarray(data_raw).reshape(-1,1025)
np.save(data_name+'.npy',data) # 保存data_a*.npy文件
for i in voc_short:
data_name = 'data_b'+str(i)
f = open(data_name,'rb')
data_raw = struct.unpack('f'*209920000,f.read(4*209920000))
f.close()
data = np.asarray(data_raw).reshape(-1,1025)
np.save(data_name+'.npy',data) # 保存data_b*.npy文件
data_name = 'data_bw'
f = open(data_name,'rb')
data_raw = struct.unpack('f'*173840000,f.read(4*173840000))
np.save(data_name+'.npy',data_raw) # 保存data_bw.npy文件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中常用检测字符串相关函数汇总
Apr 15 Python
python通过函数属性实现全局变量的方法
May 16 Python
Python画图学习入门教程
Jul 01 Python
Django查询数据库的性能优化示例代码
Sep 24 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
python @classmethod 的使用场合详解
Aug 23 Python
基于python中__add__函数的用法
Nov 25 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 Python
Python while true实现爬虫定时任务
Jun 08 Python
Python如何对XML 解析
Jun 28 Python
Python使用openpyxl批量处理数据
Jun 23 Python
一篇文章弄懂Python中的内建函数
Aug 07 Python
python print出共轭复数的方法详解
Jun 25 #Python
python安装pil库方法及代码
Jun 25 #Python
Python处理时间日期坐标轴过程详解
Jun 25 #Python
python 在某.py文件中调用其他.py内的函数的方法
Jun 25 #Python
python求最大值最小值方法总结
Jun 25 #Python
python安装requests库的实例代码
Jun 25 #Python
Python登录系统界面实现详解
Jun 25 #Python
You might like
PHP7 新特性详细介绍
2016/09/06 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
js下弹出窗口的变通
2007/04/18 Javascript
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
jquery文字上下滚动的实现方法
2013/03/22 Javascript
jquery预览图片实现鼠标放上去显示实际大小
2014/01/16 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
jQuery插件pagination实现分页特效
2015/04/12 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
关于Django外键赋值问题详解
2017/08/13 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
在python shell中运行python文件的实现
2019/12/21 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
2020/01/23 Python
python中for in的用法详解
2020/04/17 Python
酒店出纳岗位职责
2013/12/29 职场文书
化工专业大学生职业生涯规划书
2014/01/14 职场文书
幼儿园校车司机的岗位职责
2014/01/30 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
2014年医院工作总结
2014/11/20 职场文书
初中教师个人总结
2015/02/10 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
社会实践活动总结格式
2015/05/11 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
党员读书活动心得体会
2016/01/14 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
golang 在windows中设置环境变量的操作
2021/04/29 Golang
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL
详解CSS3浏览器兼容
2022/12/24 HTML / CSS