使用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实现随机密码字典生成器示例
Apr 09 Python
Python的高级Git库 Gittle
Sep 22 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
用Python shell简化开发
Aug 08 Python
Python 实现域名解析为ip的方法
Feb 14 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
Mar 30 Python
Python选择网卡发包及接收数据包
Apr 04 Python
Python openpyxl读取单元格字体颜色过程解析
Sep 03 Python
TensorFlow获取加载模型中的全部张量名称代码
Feb 11 Python
python 实现两个npy档案合并
Jul 01 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 Python
PyTorch 中的傅里叶卷积实现示例
Dec 11 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
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
python实现rsa加密实例详解
2017/07/19 Python
Python简单定义与使用二叉树示例
2018/05/11 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
Python json解析库jsonpath原理及使用示例
2020/11/25 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
德国网上宠物店:Zoobio
2018/05/23 全球购物
大专生自我评价
2014/01/28 职场文书
环境卫生标语
2014/06/09 职场文书
公司周年庆典致辞
2015/07/30 职场文书
升学宴家长答谢词
2015/09/29 职场文书
小组组名及励志口号
2015/12/24 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis