使用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的web框架中的Model的教程
Apr 29 Python
python制作一个桌面便签软件
Aug 09 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
python学生信息管理系统
Mar 13 Python
对Python实现简单的API接口实例讲解
Dec 10 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 Python
简单分析python的类变量、实例变量
Aug 23 Python
python的slice notation的特殊用法详解
Dec 27 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
keras 多任务多loss实例
Jun 22 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连接SQLServer2005方法及代码
2013/12/26 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
浅析VUE防抖与节流
2020/11/24 Vue.js
python生成指定长度的随机数密码
2014/01/23 Python
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
Python线程之定位与销毁的实现
2019/02/17 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
详解python播放音频的三种方法
2019/09/23 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
社区服务活动小结
2014/07/08 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
大学生毕业评语
2014/12/31 职场文书
房屋所有权证明
2015/06/19 职场文书
话题作文之生命的旋律
2019/12/17 职场文书
php中pcntl_fork详解
2021/04/01 PHP
JS数组方法some、every和find的使用详情
2021/10/05 Javascript
PYTHON InceptionV3模型的复现详解
2022/05/06 Python
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript