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的Django框架中的表单处理示例
Jul 17 Python
python中 chr unichr ord函数的实例详解
Aug 06 Python
Python自定义简单图轴简单实例
Jan 08 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
May 10 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
Jul 31 Python
Django结合ajax进行页面实时更新的例子
Aug 12 Python
python中栈的原理及实现方法示例
Nov 27 Python
关于python中导入文件到list的问题
Oct 31 Python
Python办公自动化之Excel(中)
May 24 Python
Python Matplotlib库实现画局部图
Nov 17 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
用Flash图形化数据(二)
2006/10/09 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
启用Csrf后POST数据时出现的400错误
2015/07/05 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
python reduce 函数使用详解
2017/12/05 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
C#笔试题和英文面试题
2013/02/07 面试题
医药营销个人求职信
2014/04/12 职场文书
职业生涯规划书前言
2014/04/15 职场文书
城管综合整治方案
2014/05/01 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
医德医风学习心得体会
2016/01/25 职场文书
超外差式晶体管收音机的组装与统调
2021/04/22 无线电
Vue如何实现组件间通信
2021/05/15 Vue.js
Python中request的基本使用解决乱码问题
2022/04/12 Python