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直接访问私有属性的简单方法
Jul 25 Python
python实现简易云音乐播放器
Jan 04 Python
pygame实现俄罗斯方块游戏
Jun 26 Python
Python连接Redis的基本配置方法
Sep 13 Python
python根据list重命名文件夹里的所有文件实例
Oct 25 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
python判断一个对象是否可迭代的例子
Jul 22 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
Jun 02 Python
用Python开发app后端有优势吗
Jun 29 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
Lombok插件安装(IDEA)及配置jar包使用详解
Nov 04 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表单加入Token防止重复提交的方法分析
2016/10/10 PHP
关于laravel 子查询 & join的使用
2019/10/16 PHP
JavaScript的目的分析
2007/01/05 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
2016/08/31 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
JS实现吸顶特效
2020/01/08 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
Python实现获取网站PR及百度权重
2015/01/21 Python
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
Python函数式编程
2017/07/20 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
Python玩转Excel的读写改实例
2019/02/22 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
使用Python封装excel操作指南
2021/01/29 Python
美国复古街头服饰精品店:Need Supply Co.
2017/02/22 全球购物
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
会计实习自我鉴定
2013/12/04 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
离婚协议书格式
2015/01/26 职场文书
运输公司工作总结
2015/08/11 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python