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操作使用MySQL数据库的实例代码
May 25 Python
Python实现Kmeans聚类算法
Jun 10 Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 Python
Python 通过调用接口获取公交信息的实例
Dec 17 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
Aug 12 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
快速解决jupyter启动卡死的问题
Apr 10 Python
Python bisect模块原理及常见实例
Jun 17 Python
使用darknet框架的imagenet数据分类预训练操作
Jul 07 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 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
php面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
PHP中ini_set与ini_get用法实例
2014/11/04 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
layui清除radio的选中状态实例
2019/11/14 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
python的re模块使用方法详解
2019/07/26 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
工地资料员岗位职责
2013/12/31 职场文书
班主任班级寄语大全
2014/04/04 职场文书
结婚保证书范文
2014/04/29 职场文书
2015年度物流工作总结
2015/04/30 职场文书
春节慰问简报
2015/07/21 职场文书
公司董事任命书
2015/09/21 职场文书
导游词之江西赣州
2019/10/15 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS