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字符串过滤性能比较5种方法
Jun 22 Python
python读取文件名称生成list的方法
Apr 27 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
pyQt4实现俄罗斯方块游戏
Jun 26 Python
python如何实现一个刷网页小程序
Nov 27 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
对Python中画图时候的线类型详解
Jul 07 Python
Django Rest framework权限的详细用法
Jul 25 Python
python 字段拆分详解
Dec 17 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
Feb 26 Python
Python命令行参数argv和argparse该如何使用
Feb 08 Python
基于Python实现流星雨效果的绘制
Mar 18 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
关于手调机和数调机的选择
2021/03/02 无线电
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
深入分析PHP设计模式
2020/06/15 PHP
JS获取地址栏参数的小例子
2013/08/23 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
vue mounted 调用两次的完美解决办法
2018/10/29 Javascript
angular学习之动态创建表单的方法
2018/12/07 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
python获取list下标及其值的简单方法
2016/09/12 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
电气自动化大学生求职信
2013/10/16 职场文书
3的组成教学反思
2014/04/30 职场文书
医院信息公开实施方案
2014/05/09 职场文书
党员四风剖析材料
2014/08/27 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android