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实现霍夫圆和椭圆变换代码详解
Jan 12 Python
python与sqlite3实现解密chrome cookie实例代码
Jan 20 Python
python素数筛选法浅析
Mar 19 Python
Python中 map()函数的用法详解
Jul 10 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
Dec 05 Python
python代码 输入数字使其反向输出的方法
Dec 22 Python
django将网络中的图片,保存成model中的ImageField的实例
Aug 07 Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 Python
python函数局部变量、全局变量、递归知识点总结
Nov 15 Python
Python文件时间操作步骤代码详解
Apr 13 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 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
自己动手做一个SQL解释器
2006/10/09 PHP
PHP 进程锁定问题分析研究
2009/11/24 PHP
php生成无限栏目树
2017/03/16 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
php适配器模式简单应用示例
2019/10/23 PHP
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
Python实现从百度API获取天气的方法
2015/03/11 Python
python操作字典类型的常用方法(推荐)
2016/05/16 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
python能在浏览器能运行吗
2020/06/17 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
实习生自荐信范文分享
2013/11/27 职场文书
信息专业个人的自我评价
2013/12/27 职场文书
竞选村长演讲稿
2014/04/28 职场文书
学校就业推荐信范文
2014/05/19 职场文书
售房委托书
2014/08/30 职场文书