我的编程空间,编程开发者的网络收藏夹
学习永远不晚

5.7:Python如何读取二进制文件?

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

5.7:Python如何读取二进制文件?

随着信息技术的不断发展,二进制数据已经成为了现代计算机应用中不可或缺的一部分。在许多情况下,我们需要读取和处理二进制数据,这些数据可能包括图像、音频、视频、压缩文件等。Python作为一种流行的编程语言,提供了多种方法和库,可以帮助我们读取和处理各种类型的二进制数据。本文将介绍Python中读取二进制文件的方法和库,并且举例说明如何使用这些方法和库来处理不同类型的二进制数据。

以下是四个举例,详细介绍Python如何读取二进制文件。

① 使用open()函数读取二进制文件

在Python中,使用内置的open()函数可以打开文件。为了读取二进制文件,我们需要在打开文件时使用‘rb’模式。在这种模式下,读取的内容会以二进制形式返回。


例如,下面的代码可以读取一个名为“example.jpg”的图像文件。

with open('example.jpg', 'rb') as f:    image_data = f.read()

在这个代码中,我们使用了with语句来打开文件,这样可以在不需要文件时自动关闭文件。读取二进制数据后,我们可以将其存储在一个变量中。在本例中,我们将图像文件的二进制数据存储在了一个名为“image_data”的变量中。

举例分析——

这段Python代码可以用于读取名为"example.jpg"的二进制图像文件,并将其内容存储在一个变量(image_data)中。这个变量可以用于进一步的图像处理、分析或者存储。

举个例子,假设我们想要对这个图像进行简单的分析,比如计算图像的宽度和高度,可以使用Python的Pillow库来实现。下面是一个示例代码:

from PIL import Imagewith open('example.jpg', 'rb') as f:    image_data = f.read()image = Image.open(io.BytesIO(image_data))width, height = image.sizeprint(f"The image width is {width} and the height is {height}")

这个代码片段中,我们首先使用上面提到的代码段读取图像数据。然后,我们使用Pillow库中的Image类打开图像数据,并使用size属性获取图像的宽度和高度。最后,我们将这些信息输出到控制台。

需要注意的是,我们使用了io.BytesIO类来将二进制数据转换为内存中的图像对象。这是因为Pillow库无法直接处理二进制数据,需要将其转换为内存中的图像对象。

② 使用struct模块解析二进制数据

在处理二进制数据时,有时需要解析二进制数据中的特定部分。在这种情况下,可以使用Python的struct模块。

struct模块提供了一些函数,可以将二进制数据转换为Python中的数据类型。例如,下面的代码可以解析一个名为“example.bin”的二进制文件,该文件包含两个int类型的数据。

import structwith open('example.bin', 'rb') as f:    binary_data = f.read()first_int = struct.unpack('i', binary_data[:4])[0]second_int = struct.unpack('i', binary_data[4:])[0]print(f'The first integer is {first_int}')print(f'The second integer is {second_int}')

在这个代码中,我们使用了struct.unpack()函数将二进制数据转换为int类型的数据。在本例中,我们首先将前4个字节解析为一个int类型的数据,然后将剩余的字节解析为另一个int类型的数据。最后,我们使用print语句输出这两个数据。

举例分析——

这段Python代码可以用于读取名为"example.bin"的二进制文件,并将其内容解析成整数类型。这个例子中,我们假设"example.bin"包含两个32位的整数值,每个整数占用4个字节(即32位),并且这些整数以大端字节序(big-endian)存储在文件中。

一个典型的应用场景是解析二进制文件,特别是处理来自硬件设备或其他系统的数据。例如,假设我们有一个传感器设备,它每秒钟产生一个二进制数据文件,其中包含了传感器的读数。我们可以使用类似的代码来解析这些数据并进行进一步的分析或存储。

下面是一个示例代码:

import structwith open('sensor_data.bin', 'rb') as f:    binary_data = f.read()num_readings = len(binary_data) // 4readings = []for i in range(num_readings):    reading = struct.unpack('>f', binary_data[i*4:(i+1)*4])[0]    readings.append(reading)avg_reading = sum(readings) / num_readingsprint(f'The average sensor reading is {avg_reading}')

在这个示例代码中,我们假设"sensor_data.bin"包含若干个32位浮点数,每个浮点数占用4个字节,并且这些浮点数以大端字节序存储在文件中。我们首先读取整个文件的二进制数据,并计算出文件中包含的浮点数数量。然后,我们使用一个循环来逐个解析每个浮点数,并将其存储在一个列表中。最后,我们计算出这些浮点数的平均值,并将其输出到控制台。

需要注意的是,我们在unpack函数中使用了大端字节序的格式字符串(">f")来解析浮点数。这是因为大多数传感器设备使用的是大端字节序,需要按照相应的格式字符串来解析数据。

③ 使用numpy库读取二进制数据
在处理二进制数据时,常常需要将二进制数据转换为多维数组。在这种情况下,可以使用Python的numpy库。
numpy库提供了一些函数,可以将二进制数据转换为多维数组。例如,下面的代码可以读取一个名为“example.dat”的二进制数据文件,并将其转换为一个二维数组。

import numpy as npwith open('example.dat', 'rb') as f:    binary_data = f.read()array_data = np.frombuffer(binary_data, dtype=np.float32).reshape((3, 4))print(array_data)

在这个代码中,我们首先使用open()函数读取二进制数据文件。然后,我们使用numpy的frombuffer()函数将二进制数据转换为一个一维数组,使用dtype参数指定数组元素的类型。接下来,我们使用reshape()函数将一维数组转换为一个二维数组。最后,我们使用print语句输出这个数组。

举例分析——

这段Python代码可以用于读取名为"example.dat"的二进制数据文件,并将其内容转换成NumPy数组。在这个例子中,我们假设"example.dat"文件包含一个3x4的浮点数数组,每个浮点数占用4个字节。

一个典型的应用场景是读取由其他程序或库生成的二进制数据文件,并将其转换为NumPy数组进行进一步的分析或可视化。例如,假设我们使用C++编写了一个程序,生成了一个二进制文件,其中包含了某些数值的密度分布数据。我们可以使用类似的代码来读取这些数据并使用NumPy数组进行可视化或分析。

下面是一个示例代码:

import numpy as npimport matplotlib.pyplot as pltwith open('density_data.dat', 'rb') as f:    binary_data = f.read()density_data = np.frombuffer(binary_data, dtype=np.float32).reshape((100, 100))plt.imshow(density_data, cmap='viridis')plt.colorbar()plt.show()

在这个示例代码中,我们假设"density_data.dat"包含一个100x100的浮点数数组,表示某种密度分布数据。我们首先读取整个文件的二进制数据,并使用NumPy的frombuffer函数将其转换为浮点数数组。然后,我们使用Matplotlib库将数组中的数据可视化为一个热图,并添加一个颜色条来显示数据值的范围。

需要注意的是,我们在frombuffer函数中使用了dtype=np.float32参数来指定数组中元素的数据类型。这是因为我们假设数据文件中每个浮点数占用4个字节,因此需要使用np.float32类型来正确地解析数据。

④ 使用Pillow库读取图像数据

Pillow库是Python中一个非常流行的图像处理库,可以读取和处理多种图像格式的文件。在处理图像时,我们通常需要读取图像数据并对其进行处理。以下是使用Pillow库读取图像数据的示例代码。

from PIL import Imagewith Image.open('example.jpg') as img:    image_data = img.tobytes()print(image_data[:10])

在这个代码中,我们首先使用Pillow库的Image.open()函数打开一个名为“example.jpg”的图像文件。然后,我们使用tobytes()函数将图像数据转换为一个字符串。最后,我们使用print语句输出字符串中的前10个字节。

举例分析——

这段Python代码可以用于读取名为"example.jpg"的图像文件,并将其像素数据转换为字节字符串。具体地,我们使用了Python Imaging Library (PIL) 中的Image类来打开图像文件,然后调用tobytes()函数将像素数据转换为字节字符串。

一个典型的应用场景是在图像处理中,例如图像压缩或数据增强。在这些任务中,我们通常需要使用二进制格式的图像数据来进行处理。例如,假设我们正在开发一个图像压缩算法,该算法需要将原始图像数据编码为一系列二进制数据。我们可以使用类似的代码将图像数据转换为字节字符串,并将其输入到压缩算法中。

下面是一个示例代码:

from PIL import Imageimport numpy as npwith Image.open('example.jpg') as img:    img_data = np.array(img)  # Convert image to NumPy array    compressed_data = my_compress_function(img_data)  # Compress image data# Write compressed data to filewith open('compressed_image.bin', 'wb') as f:    f.write(compressed_data)# Read compressed data from file and decompresswith open('compressed_image.bin', 'rb') as f:    compressed_data = f.read()decompressed_data = my_decompress_function(compressed_data)  # Decompress datareconstructed_img = Image.fromarray(decompressed_data)  # Convert data to image# Show reconstructed imagereconstructed_img.show()

在这个示例代码中,我们首先使用PIL库的Image类读取名为"example.jpg"的图像文件,并将其转换为NumPy数组。然后,我们使用一个自定义的压缩函数my_compress_function()将图像数据压缩,并将压缩后的数据写入到一个二进制文件"compressed_image.bin"中。

接下来,我们使用类似的代码从二进制文件中读取压缩后的数据,并使用另一个自定义的解压函数my_decompress_function()将其解压缩。最后,我们将解压缩后的数据转换为图像对象,并使用PIL库的Image类显示重构的图像。

需要注意的是,这只是一个简单的示例代码,实际的图像压缩算法可能会更加复杂,并且需要考虑许多其他因素,例如图像质量、压缩比率等。

总结——
本文主要介绍了Python中读取二进制文件的方法和库。我们首先了解了二进制文件和文本文件的区别,并说明了为什么需要读取二进制文件。接下来,我们给出了四个示例,包括使用open()函数读取二进制文件、使用struct模块解析二进制数据、使用numpy库读取二进制数据和使用Pillow库读取图像数据。这些方法和库可以帮助我们处理各种类型的二进制数据,包括图像、音频、视频、压缩文件等。最后,我们总结了Python读取二进制文件的方法和库的优势,包括灵活性、跨平台性、高效性等,这些优势使得Python成为一种非常适合处理二进制数据的语言。

来源地址:https://blog.csdn.net/weixin_44609920/article/details/130163005

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

5.7:Python如何读取二进制文件?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python 读取二进制文件

固定大小from functools import partiali = 0f = open('lgtm-monitor.dat', 'rb')f2 = open('f.txt', 'w')records = iter(partial(f.
2023-01-31

C#中如何读取二进制文件

C#中如何读取二进制文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C#读取二进制文件当想到所有文件都转换为 XML时,确实是一件好事。但是,这并非事实。仍旧
2023-06-18

Python如何读取二进制数据

在Python中,可以使用`open`函数来打开一个二进制文件,并使用`read`方法来读取二进制数据。下面是一个示例代码:```pythonwith open('binary_data.bin', 'rb') as file:binary
2023-09-08

Matlab怎么读取二进制文件

在MATLAB中,可以使用fread函数来读取二进制文件。fread函数的语法如下:data = fread(fileID, size, precision, skip, machineformat)参数说明:- fileID:二进制文件的
2023-09-08

python 二进制文件的读写

对于二进制代码的读取:import structwith open('valid0_0','rb') as f:#valid0_0二进制文件名 f.seek(0,2) n=f.tell() f.seek(0,0) b
2023-01-31

Python怎么读写二进制文件

本篇内容介绍了“Python怎么读写二进制文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python读写二进制文件使用python语言直
2023-06-04

如何使用 Golang 读写二进制文件?

如何使用 Golang 读写二进制文件?读二进制文件package mainimport ("fmt""os")func main() {// 打开一个二进制文件file, err := os.Open("myfile.bin")if
如何使用 Golang 读写二进制文件?
2024-05-15

Python读写二进制文件的实现

本文主要介绍了Python读写二进制文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-15

python怎么读文件变成二进制

你可以使用`open()`函数以二进制模式打开文件。在打开文件时,将文件模式参数设置为`"rb"`,其中`"r"`表示只读,`"b"`表示二进制模式。下面是一个例子,展示了如何将文件读取为二进制数据:```pythonwith open("
2023-09-08

C\C++如何实现读写二进制文件

这篇文章主要介绍“C\C++如何实现读写二进制文件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C\C++如何实现读写二进制文件”文章能帮助大家解决问题。读写二进制文件打开文件fopen() 函数用
2023-07-05

怎么使用Python读写二进制文件

这篇文章主要介绍“怎么使用Python读写二进制文件”,在日常操作中,相信很多人在怎么使用Python读写二进制文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Python读写二进制文件”的疑惑有所
2023-07-06

3-6 读写二进制文件

3-4  读写二进制文件u本节学习目标:n了解二进制文件读取器/编写器n学习建立BinaryReader类的一些主要方法n学习建立BinaryWriter类的一些主要方法n学习通过二进制读写操作进行图片的存储与复制n学习通过二进制读写操作实
2023-01-31

利用Java读取二进制文件实例详解

前言本文主要给大家介绍了关于Java读取二进制文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。读Hex写CSVdata目录下有little-endian bin文件,2个字节代表一个数字。bin存储的数据格式
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录