使用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处理json数据中的中文
Mar 06 Python
浅谈Python中列表生成式和生成器的区别
Aug 03 Python
python实现机器人行走效果
Jan 29 Python
python中字符串比较使用is、==和cmp()总结
Mar 18 Python
python3 flask实现文件上传功能
Mar 20 Python
深入理解python中sort()与sorted()的区别
Aug 29 Python
Python语言进阶知识点总结
May 28 Python
python创建学生管理系统
Nov 22 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
Mar 09 Python
Django 解决model 反向引用中的related_name问题
May 19 Python
python等待10秒执行下一命令的方法
Jul 19 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 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
PHP4之真OO
2006/10/09 PHP
也谈 PHP 和 MYSQL
2006/10/09 PHP
推荐个功能齐全的发送PHP邮件类
2007/01/03 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
2020/11/10 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
jQuery Validation实例代码 让验证变得如此容易
2010/10/18 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
vue cli 全面解析
2018/02/28 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
python中正则表达式的使用详解
2014/10/17 Python
Python文件和目录操作详解
2015/02/08 Python
简单介绍Ruby中的CGI编程
2015/04/10 Python
python编码最佳实践之总结
2016/02/14 Python
python中zip()方法应用实例分析
2016/04/16 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
Python类继承和多态原理解析
2020/02/05 Python
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
计算机专业职业规划
2014/02/28 职场文书
力学专业求职信
2014/07/23 职场文书
违纪检讨书范文
2015/01/27 职场文书
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript