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读写及备份oracle数据库操作示例
May 17 Python
Python实现随机创建电话号码的方法示例
Dec 07 Python
python 获取图片分辨率的方法
Jan 08 Python
Python写一个基于MD5的文件监听程序
Mar 11 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
python 实现12bit灰度图像映射到8bit显示的方法
Jul 08 Python
使用python对多个txt文件中的数据进行筛选的方法
Jul 10 Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 Python
使用python3批量下载rbsp数据的示例代码
Dec 20 Python
Python读取配置文件(config.ini)以及写入配置文件
Apr 08 Python
在python image 中实现安装中文字体
May 16 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
php基础知识:类与对象(5) static
2006/12/13 PHP
php压缩和解压缩字符串的方法
2015/03/14 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
如果文字过长,则将过长的部分变成省略号显示
2006/06/26 Javascript
web 页面分页打印的实现
2009/06/22 Javascript
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
Python requests模块session代码实例
2020/04/14 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
松下电器美国官方商店:Panasonic美国
2016/10/14 全球购物
初中英语教学反思
2014/01/25 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
蓝颜请假条
2014/04/11 职场文书
教师个人发展总结
2015/02/11 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA