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实现博客文章爬虫示例
Feb 26 Python
python3.5使用tkinter制作记事本
Jun 20 Python
Python操作Access数据库基本步骤分析
Sep 19 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
Python之时间和日期使用小结
Feb 14 Python
Python利用matplotlib做图中图及次坐标轴的实例
Jul 08 Python
解决Django migrate不能发现app.models的表问题
Aug 31 Python
tensorflow estimator 使用hook实现finetune方式
Jan 21 Python
Python中的特殊方法以及应用详解
Sep 20 Python
python自动化调用百度api解决验证码
Apr 13 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学习资料汇总与网址
2007/03/16 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
JsRender for object语法简介
2014/10/31 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
Python3基础之函数用法
2014/08/13 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
python发送邮件脚本
2018/05/22 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
Python 3.8 新功能全解
2019/07/25 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
工作失误检讨书范文大全
2014/01/13 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
银行招聘自荐信
2015/03/06 职场文书
节约用水广告语60条
2019/11/14 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android
java开发双人五子棋游戏
2022/05/06 Java/Android