使用Python读取二进制文件的实例讲解


Posted in Python onJuly 09, 2018

目标:目标文件为一个float32型存储的二进制文件,按列优先方式存储。本文使用Python读取该二进制文件并使用matplotlib.pyplot相关工具画出图像

工具:Python3, matplotlib,os,struct,numpy

1. 读取二进制文件

首先使用open函数打开文件,打开模式选择二进制读取"rb"。

f = open(filename, "rb")

第二步,需要打开按照行列读取文件,由于是纯二进制文件,内部不含邮任何的数据结构信息,因此我们需要给定二进制数据的行数列数(nx和ny)来确定图像的形状。这里我们的数据类型是float32型的,对应过来是4bytes,使用for循环逐个read4个字节。

for i in range(nx):
 for j in range(ny):
  data = f.read(4)

得到的结果如下:

b'5\x9d\x82\xc3'
b'\xb1\x04\x10\xc4'
b'\xc1\x9eD\xc4'
b'a\x86R\xc4'
b'\x15\x01=\xc4'

可以看到,读入的数据为十六进制数,这个时候的数据并不能直接用来画图,需要转换为float32型。这里使用struct.unpack来转译

data_float = struct.unpack("f", data)[0]

就可以得到正确的结果了

-261.2281799316406
-576.0733032226562
-786.4805297851562
-842.0996704101562
-756.0169067382812

建立一个numpy数组,将读入的数据分别按列优先的方式放入数组,就完成了图像读入的操作。

将上述操作包装成函数,代码如下:

def xshow(filename, nx, nz):
 f = open(filename, "rb")
 pic = np.zeros((nx, nz))
 for i in range(nx):
  for j in range(nz):
   data = f.read(4)
   elem = struct.unpack("f", data)[0]
   pic[i][j] = elem
 f.close()
 return pic

2. 画出图像

这里我们的目的是将矩阵输出灰度图,并保存为tiff格式的图像,效果图如下(该图为使用弹性波波动方程在Marmousi模型下的波场快照):

使用Python读取二进制文件的实例讲解

不需要坐标轴的信息,直接使用imsave命令,使用cmap选定颜色格式即可。

plt.imsave('output.tiff', img, format='tiff', cmap=plt.cm.gray)

如果使用PIL库读取图像,可能会得到不同的效果,可能需要做直方图均衡,目前还没有找到原因。

使用Python读取二进制文件的实例讲解

以上这篇使用Python读取二进制文件的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
Python 多核并行计算的示例代码
Nov 07 Python
pip安装时ReadTimeoutError的解决方法
Jun 12 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
python list格式数据excel导出方法
Oct 31 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
Django中的cookie和session
Aug 27 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
Python 使用生成器代替线程的方法
Aug 04 Python
Python日志打印里logging.getLogger源码分析详解
Jan 17 Python
通过Python把学姐照片做成拼图游戏
Feb 15 Python
Python实现科学占卜 让视频自动打码
Apr 09 Python
Python实现随机漫步功能
Jul 09 #Python
Python2包含中文报错的解决方法
Jul 09 #Python
对numpy数据写入文件的方法讲解
Jul 09 #Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 #Python
Tensorflow中的placeholder和feed_dict的使用
Jul 09 #Python
NumPy.npy与pandas DataFrame的实例讲解
Jul 09 #Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 #Python
You might like
PHP 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
万能的php分页类
2017/07/06 PHP
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
python继承和抽象类的实现方法
2015/01/14 Python
python实现实时监控文件的方法
2016/08/26 Python
Python中is与==判断的区别
2017/03/28 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
python实现关键词提取的示例讲解
2018/04/28 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
python二元表达式用法
2019/12/04 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
python列表的逆序遍历实现
2020/04/20 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
建筑工程管理专业自荐信范文
2013/12/28 职场文书
物业经理自我鉴定
2014/03/03 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
python tqdm用法及实例详解
2021/06/16 Python
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python