使用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实现得到一个给定类的虚函数
Sep 28 Python
Python中使用wxPython开发的一个简易笔记本程序实例
Feb 08 Python
python实现文件快照加密保护的方法
Jun 30 Python
解决Python requests 报错方法集锦
Mar 19 Python
Python函数式编程
Jul 20 Python
Python实现端口检测的方法
Jul 24 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
python通过配置文件共享全局变量的实例
Jan 11 Python
对python中词典的values值的修改或新增KEY详解
Jan 20 Python
python opencv实现信用卡的数字识别
Jan 12 Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 Python
Pytorch distributed 多卡并行载入模型操作
Jun 05 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
生成缩略图
2006/10/09 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
javascript 面向对象思想 附源码
2009/07/07 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
最简单的tab切换实例代码
2016/05/13 Javascript
js实现省份下拉菜单效果
2017/02/15 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
vue中的计算属性实例详解
2018/09/19 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
python统计文本文件内单词数量的方法
2015/05/30 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
python判断输入日期为第几天的实例
2018/11/13 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
python range实例用法分享
2020/02/06 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
英国著名书店:Foyles
2018/12/01 全球购物
视图的作用
2014/12/19 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
旅游专业毕业生自荐书
2014/06/30 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
小学运动会前导词
2015/07/20 职场文书
2016秋季运动会前导词
2015/11/25 职场文书