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中使用HTMLParser解析HTML的教程
Apr 29 Python
浅谈Python生成器generator之next和send的运行流程(详解)
May 08 Python
Python实现图片转字符画的示例
Aug 22 Python
使用numba对Python运算加速的方法
Oct 15 Python
Python3实现对列表按元组指定列进行排序的方法分析
Dec 22 Python
Python multiprocessing多进程原理与应用示例
Feb 28 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
May 16 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
Jul 28 Python
Django中template for如何使用方法
Jan 31 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之第一天
2006/10/09 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
php读取本地json文件的实例
2018/03/07 PHP
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
详解springmvc 接收json对象的两种方式
2016/12/06 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
使用Python解析JSON数据的基本方法
2015/10/15 Python
深入理解Python中的内置常量
2017/05/20 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
详解python Todo清单实战
2018/11/01 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
Python中内建模块collections如何使用
2020/05/27 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
Python Http请求json解析库用法解析
2020/11/28 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
Levi’s西班牙官方网站:李维斯,著名的牛仔裤品牌
2020/08/20 全球购物
大四自我鉴定
2014/02/08 职场文书
宾馆仓管员岗位职责
2014/07/27 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
观看建国大业观后感
2015/06/01 职场文书
红高粱观后感
2015/06/10 职场文书
Python包argparse模块常用方法
2021/06/04 Python
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers