Lire un fichier binaire en Python

Manav Narula 30 janvier 2023
  1. Lire un fichier binaire avec la fonction open() en Python
  2. Lire un fichier binaire avec pathlib.Path en Python
  3. Lecture d’un fichier binaire avec la fonction numpy.fromfile() en Python
Lire un fichier binaire en Python

Le programme ou le processeur interne interprète un fichier binaire. Il contient les octets comme contenu. Lorsque nous lisons un fichier binaire, un objet de type bytes est renvoyé.

Lire un fichier binaire avec la fonction open() en Python

En Python, nous avons la fonction open() utilisée pour créer un objet fichier en passant son chemin à la fonction et en ouvrant un fichier dans un mode spécifique, le mode lecture par défaut. Lorsque nous ouvrons des fichiers binaires, nous devons spécifier le paramètre b lors de l’ouverture de tels fichiers en mode lecture, écriture ou ajout. Dans ce tutoriel, nous traiterons du mode de lecture binaire - rb.

Dans le code ci-dessous, nous allons lire un fichier binaire et imprimer un caractère du fichier :

with open("sample.bin", "rb") as f:
    data = f.read()

print(data[2])

Production :

83

Si nous imprimons des caractères individuels, nous pouvons alors visualiser les entiers.

Python possède un paquet appelé struct, qui possède de nombreuses méthodes et peut être utilisé pour traiter des données binaires stockées dans des fichiers, des bases de données, et d’autres ressources.

La struct.unpack() est utilisée pour lire les données empaquetées dans un format spécifique. Ce format, qui est utilisé lors de l’empaquetage et du déballage des données, est spécifié à l’aide de caractères de format. Ces caractères de format, ainsi que leur taille, sont indiqués ci-dessous :

struct unpack format table de caractères

Notez que la fonction struct.unpack() renvoie toujours un tuple.

import struct

with open("sample.bin", "rb") as f:
    data = f.read()

unpack_result = struct.unpack("hhl", data[0:8])
print(unpack_result)

Production :

(1280, 27731, 7037801)

Ici, hhl indique le format de données court, court et long int, comme on peut le voir dans la sortie. C’est pourquoi la mémoire tampon pour le déballage n’est que de 8 octets puisque la taille du format est de 8(2+2+4).

Lire un fichier binaire avec pathlib.Path en Python

Nous pouvons également utiliser la méthode read_bytes() de la classe Path de la bibliothèque pathlib pour lire un fichier en mode octets et ensuite interpréter les données en utilisant la fonction struct.unpack() comme indiqué précédemment :

from pathlib import Path
import struct

data = Path("sample.bin").read_bytes()

multiple = struct.unpack("ii", data[:8])

print(multiple)

Production :

(1817380096, 7037801)

Lecture d’un fichier binaire avec la fonction numpy.fromfile() en Python

Une autre approche intéressante est fournie dans le module NumPy. En utilisant la fonction fromfile() dans ce module, nous pouvons lire les données binaires des fichiers après avoir spécifié le format des données en utilisant la fonction dtype(). Cette méthode est considérée comme rapide. Le code suivant montre comment l’implémenter :

import numpy as np

with open("sample.bin") as f:
    rectype = np.dtype(np.int32)
    bdata = np.fromfile(f, dtype=rectype)

print(bdata)

Production :

[1817380096    7037801]

Ici, nous spécifions le type de format comme entier-32 bits et nous extrayons les données en utilisant la fonction fromfile().

Auteur: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Article connexe - Python File