使用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实现决策树分类(2)
Aug 30 Python
python tkinter窗口最大化的实现
Jul 15 Python
浅谈python图片处理Image和skimage的区别
Aug 04 Python
Python模块的定义,模块的导入,__name__用法实例分析
Jan 07 Python
关于python 的legend图例,参数使用说明
Apr 17 Python
初学者学习Python好还是Java好
May 26 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
Jun 15 Python
flask开启多线程的具体方法
Aug 02 Python
Python爬虫实现自动登录、签到功能的代码
Aug 20 Python
python简单实现9宫格图片实例
Sep 03 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 Python
python实现计算器简易版
Dec 17 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中的string类型使用说明
2010/07/27 PHP
php INI配置文件的解析实现分析
2011/01/04 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
javascript removeChild 使用注意事项
2009/04/11 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
Python中的ctime()方法使用教程
2015/05/22 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
Python元字符的用法实例解析
2018/01/17 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
keras输出预测值和真实值方式
2020/06/27 Python
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
工程总经理工作职责
2013/12/09 职场文书
经典安踏广告词
2014/03/21 职场文书
2015年春节标语口号
2014/12/09 职场文书
初中教师个人工作总结
2015/02/10 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
七年级数学教学反思
2016/02/17 职场文书
MySQL七种JOIN类型小结
2021/10/24 MySQL