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连接PostgreSQL数据库的方法
Nov 28 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
Jul 13 Python
如何安装多版本python python2和python3共存以及pip共存
Sep 18 Python
对python 匹配字符串开头和结尾的方法详解
Oct 27 Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 Python
python实现抖音点赞功能
Apr 07 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
python解释器spython使用及原理解析
Aug 24 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
Django 自定义分页器的实现代码
Nov 24 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
python生成大写32位uuid代码
Mar 03 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持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
基于jquery的气泡提示效果
2010/05/31 Javascript
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
Python多线程实现同步的四种方式
2017/05/02 Python
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
python代码如何注释
2020/06/01 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
python中count函数知识点浅析
2020/12/17 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
会计学自我鉴定
2014/02/06 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
中考学习决心书
2015/02/04 职场文书
民事调解协议书
2016/03/21 职场文书
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js