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多线程ctrl+c退出问题解决方案
Oct 23 Python
python遍历类中所有成员的方法
Mar 18 Python
进一步了解Python中的XML 工具
Apr 13 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 Python
python学习教程之使用py2exe打包
Sep 24 Python
使用Python的turtle模块画图的方法
Nov 15 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
Feb 03 Python
对python中的logger模块全面讲解
Apr 28 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
Jul 11 Python
基于Python的Jenkins的二次开发操作
May 12 Python
python 获取剪切板内容的两种方法
Nov 28 Python
使用Python封装excel操作指南
Jan 29 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电台频率大全 - 11 浙江省
2020/03/11 无线电
在PHP中利用XML技术构造远程服务(上)
2006/10/09 PHP
图书管理程序(一)
2006/10/09 PHP
初学CAKEPHP 基础教程
2009/11/02 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
教你如何终止JQUERY的$.AJAX请求
2016/02/23 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
2017/03/28 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
Python实现从百度API获取天气的方法
2015/03/11 Python
Python绘制热力图示例
2019/09/27 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
为什么要使用servlet
2016/01/17 面试题
应届毕业生通用的自荐书范文
2014/02/07 职场文书
党员承诺书格式
2014/05/21 职场文书
售房委托书
2014/08/30 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
亮剑精神观后感
2015/06/05 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
SQL Server表分区删除详情
2021/10/16 SQL Server