92 votes

Lecture d'entiers à partir d'un fichier binaire en Python

J'essaie de lire un BMP en Python. Je sais que les deux premiers octets indiquent le cabinet BMP. Les 4 octets suivants sont la taille du fichier. Lorsque j'exécute :

fin = open("hi.bmp", "rb")
firm = fin.read(2)  
file_size = int(fin.read(4))  

J'ai compris :

ValueError : littéral invalide pour int() avec base 10 : 'F# \x13 '

Ce que je veux faire, c'est lire ces quatre octets en tant qu'entier, mais il semble que Python les lise en tant que caractères et renvoie une chaîne de caractères, qui ne peut pas être convertie en entier. Comment puis-je faire cela correctement ?

2 votes

Si votre objectif est de utiliser le bitmap au lieu de passer du temps à écrire votre propre bibliothèque BMP (non pas que cela n'ait pas l'air amusant...) vous pouvez utiliser PIL pythonware.com/produits/pil que vous avez peut-être déjà installé. Essayez : import Image

8 votes

Merci Jared, mais je voulais lire le bmp manuellement seulement pour m'amuser ! :)

1voto

Super S Points 277

Lorsque vous lisez un fichier binaire, un type de données appelé octets est utilisé. C'est un peu comme une liste ou un tuple, sauf qu'il ne peut stocker que des entiers de 0 à 255.

Essayez :

file_size = fin.read(4)
file_size0 = file_size[0]
file_size1 = file_size[1]
file_size2 = file_size[2]
file_size3 = file_size[3]

Ou :

file_size = list(fin.read(4))

Au lieu de :

file_size = int(fin.read(4))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X