使用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中enumerate的用法实例解析
Aug 18 Python
Python将xml和xsl转换为html的方法
Mar 10 Python
Python 如何访问外围作用域中的变量
Sep 11 Python
Python 抓取微信公众号账号信息的方法
Jun 14 Python
Python图像处理PIL各模块详细介绍(推荐)
Jul 17 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
python集合的新增元素方法整理
Dec 07 Python
用Python提取PDF表格的方法
Apr 11 Python
Python人工智能之混合高斯模型运动目标检测详解分析
Nov 07 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修改NetBeans默认字体的大小
2013/07/02 PHP
php异常处理使用示例
2014/02/25 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
详解webpack3如何正确引用并使用jQuery库
2017/08/26 jQuery
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
详谈python read readline readlines的区别
2017/09/22 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
详解Python循环作用域与闭包
2019/03/21 Python
python pycharm的安装及其使用
2019/10/11 Python
python中栈的原理及实现方法示例
2019/11/27 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
教师年终个人自我评价
2013/10/04 职场文书
买房委托公证书
2014/04/08 职场文书
爱情保证书大全
2014/04/29 职场文书
售后客服工作职责
2014/06/16 职场文书
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书