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简单的实现树莓派的WEB控制
Feb 18 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
python实现贪吃蛇游戏
Mar 21 Python
Python Pexpect库的简单使用方法
Jan 29 Python
Django ORM 查询管理器源码解析
Aug 05 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
Django 项目布局方法(值得推荐)
Mar 22 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
python如何设置静态变量
Sep 07 Python
python os.listdir()乱码解决方案
Jan 31 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
Jun 11 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中图片等比缩放的实例
2013/03/24 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
全面理解闭包机制
2016/07/11 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
easyui combogrid实现本地模糊搜索过滤多列
2017/05/13 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
python基础教程项目三之万能的XML
2018/04/02 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
Python调用C/C++的方法解析
2020/08/05 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
在校学生职业规划范文
2014/01/08 职场文书
大学生演讲稿范文
2014/01/11 职场文书
打造高效课堂实施方案
2014/03/22 职场文书
推普周活动总结
2014/08/28 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android