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使用循环实现批量创建文件夹示例
Mar 25 Python
使用Python进行二进制文件读写的简单方法(推荐)
Sep 12 Python
Django卸载之后重新安装的方法
Mar 15 Python
详解Python import方法引入模块的实例
Aug 02 Python
python XlsxWriter模块创建aexcel表格的实例讲解
May 03 Python
Python wxPython库消息对话框MessageDialog用法示例
Sep 03 Python
python调用c++ ctype list传数组或者返回数组的方法
Feb 13 Python
在python中画正态分布图像的实例
Jul 08 Python
如何用Python来理一理红楼梦里的那些关系
Aug 14 Python
python Event事件、进程池与线程池、协程解析
Oct 25 Python
Python小整数对象池和字符串intern实例解析
Mar 21 Python
Python extract及contains方法代码实例
Sep 11 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
MySQL相关说明
2007/01/15 PHP
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
PHP实现多关键字加亮功能
2016/10/21 PHP
jquery 学习笔记 传智博客佟老师附详细注释
2020/09/12 Javascript
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
vue小白入门教程
2018/04/02 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
python如何爬取网页中的文字
2020/07/28 Python
python 调用Google翻译接口的方法
2020/12/09 Python
python3判断IP地址的方法
2021/03/04 Python
canvas线条的属性详解
2018/03/27 HTML / CSS
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
expedia比利时:预订航班+酒店并省钱
2018/07/13 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
内勤主管岗位职责
2014/04/03 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
Java字符串逆序方法详情
2022/03/21 Java/Android