使用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 相关文章推荐
一个基于flask的web应用诞生 组织结构调整(7)
Apr 11 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
Python实现的选择排序算法示例
Nov 29 Python
python 判断网络连通的实现方法
Apr 22 Python
对Python中type打开文件的方式介绍
Apr 28 Python
django传值给模板, 再用JS接收并进行操作的实例
May 28 Python
使用python脚本实现查询火车票工具
Jul 19 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
Nov 10 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
python orm 框架中sqlalchemy用法实例详解
Feb 02 Python
Tensorflow之梯度裁剪的实现示例
Mar 08 Python
Tensorflow使用Anaconda、pycharm安装记录
Jul 29 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 采集程序中常用的函数
2009/12/09 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
php数组遍历类与用法示例
2019/05/24 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
jquery动态添加option示例
2013/12/30 Javascript
js获得参数的getParameter使用示例
2014/02/26 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
JavaScript中两个字符串的匹配
2016/06/08 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
使用Python中PDB模块中的命令来调试Python代码的教程
2015/03/30 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
详解python中各种文件打开模式
2020/01/19 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
协议书怎么写
2014/04/21 职场文书
导师评语大全
2014/04/26 职场文书
个人安全生产责任书
2014/07/28 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
2015年超市工作总结
2015/04/09 职场文书
2015年教师节新闻稿
2015/07/17 职场文书
Python中for后接else的语法使用
2021/05/18 Python
Python答题卡识别并给出分数的实现代码
2021/06/22 Python
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python