使用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 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
python模拟登录百度代码分享(获取百度贴吧等级)
Dec 27 Python
初步解析Python中的yield函数的用法
Apr 03 Python
python微元法计算函数曲线长度的方法
Nov 08 Python
python简单实现AES加密和解密
Mar 28 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
简单了解python中的与或非运算
Sep 18 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
Python使用psutil获取进程信息的例子
Dec 17 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
python使用matplotlib绘制折线图的示例代码
Sep 22 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
android上传图片到PHP的过程详解
2015/08/03 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
js对象的比较
2011/02/26 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
2018/07/10 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
用python实现对比两张图片的不同
2018/02/05 Python
python list转矩阵的实例讲解
2018/08/04 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
2019/02/11 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
2020/03/10 Python
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
小学生自我评价范文
2014/01/25 职场文书
车队司机个人自我鉴定
2014/04/17 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
农村结婚典礼主持词
2015/06/29 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书