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提示No module named images的解决方法
Sep 29 Python
Python实现配置文件备份的方法
Jul 30 Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
Python实现简单网页图片抓取完整代码实例
Dec 15 Python
python3基于OpenCV实现证件照背景替换
Jul 18 Python
Flask框架信号用法实例分析
Jul 24 Python
Flask之请求钩子的实现
Dec 23 Python
在Python中画图(基于Jupyter notebook的魔法函数)
Oct 28 Python
Python递归调用实现数字累加的代码
Feb 25 Python
python2.7使用scapy发送syn实例
May 05 Python
Python模块常用四种安装方式
Oct 20 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实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
2021/03/09 PHP
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
2014/10/17 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
JavaScript修改作用域外变量的方法
2016/03/25 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
js实现简单页面全屏
2019/09/17 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
python中黄金分割法实现方法
2015/05/06 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
python正则实现计算器功能
2017/12/14 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
python如何生成网页验证码
2018/07/28 Python
Python根据成绩分析系统浅析
2019/02/11 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
Python之pymysql的使用小结
2019/07/01 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
深入浅析Python代码规范性检测
2020/07/31 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
教学评估实施方案
2014/03/16 职场文书
商业门面租房协议书
2014/11/25 职场文书
二年级语文下册复习计划
2015/01/19 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
篮球拉拉队口号
2015/12/25 职场文书
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android
Python使用pyecharts控件绘制图表
2022/06/05 Python