使用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网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
Jun 09 Python
Python标准库之随机数 (math包、random包)介绍
Nov 25 Python
Python下线程之间的共享和释放示例
May 04 Python
Python实用日期时间处理方法汇总
May 09 Python
利用Python如何生成随机密码
Apr 20 Python
深入理解Python中的super()方法
Nov 20 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
使用python 3实现发送邮件功能
Jun 15 Python
Pytorch evaluation每次运行结果不同的解决
Jan 02 Python
python与js主要区别点总结
Sep 13 Python
详解用selenium来下载小姐姐图片并保存
Jan 26 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 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使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
CI框架常用方法小结
2016/05/17 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
vue百度地图 + 定位的详解
2019/05/13 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
使用cx_freeze把python打包exe示例
2014/01/24 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
Python实现画图软件功能方法详解
2020/07/28 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
Sql面试题
2013/03/20 面试题
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
优秀毕业生推荐信
2013/11/02 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
教师节祝酒词
2015/08/11 职场文书
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python