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中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
浅谈python3中input输入的使用
Aug 02 Python
Django 响应数据response的返回源码详解
Aug 06 Python
Python的互斥锁与信号量详解
Sep 12 Python
Python中的四种交换数值的方法解析
Nov 18 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
Python namedtuple命名元组实现过程解析
Jan 08 Python
Django基于客户端下载文件实现方法
Apr 21 Python
Python日志处理模块logging用法解析
May 19 Python
Python参数传递对象的引用原理解析
May 22 Python
在keras中对单一输入图像进行预测并返回预测结果操作
Jul 09 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
PHP安全编程之加密功能
2006/10/09 PHP
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
js之onload事件的一点使用心得
2013/08/14 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
python修改注册表终止360进程实例
2014/10/13 Python
python获取指定网页上所有超链接的方法
2015/04/04 Python
python中正则的使用指南
2016/12/04 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
python实现Windows电脑定时关机
2018/06/20 Python
python批量修改图片大小的方法
2018/07/24 Python
用Python读取几十万行文本数据
2018/12/24 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
Python列表推导式实现代码实例
2020/09/09 Python
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
国贸专业个人求职信范文
2014/01/08 职场文书
食品业务员岗位职责
2014/03/18 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
员工离职感谢信
2015/01/22 职场文书
会计求职信怎么写
2015/03/20 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
奔腾年代观后感
2015/06/09 职场文书
论语读书笔记
2015/06/26 职场文书