[PYTHON] Lire/écrire un fichier binaire
Fermé
Christophe
-
10 mai 2008 à 16:53
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 11 mai 2008 à 17:26
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 11 mai 2008 à 17:26
A voir également:
- Fichier binaire python
- Fichier rar - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir fichier .bin - Guide
4 réponses
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
10 mai 2008 à 19:51
10 mai 2008 à 19:51
Salut,
char ou octet c'est la même chose en python. En réalité tu ouvres bien tonfichier en binaire et read() t renvoie les valeurs en octet. Si tu affiches avec un print il remplacera les octets en caractères quand il pourra.
La conversion de ces octets sous forme de chaine composée de 1 et 0, c'est un truc que tu ne peux faire que manuellement.
char ou octet c'est la même chose en python. En réalité tu ouvres bien tonfichier en binaire et read() t renvoie les valeurs en octet. Si tu affiches avec un print il remplacera les octets en caractères quand il pourra.
La conversion de ces octets sous forme de chaine composée de 1 et 0, c'est un truc que tu ne peux faire que manuellement.
Si j'exécute :
fichier = "document.txt"
f = open (fichier, "rU")
while (1):
tampon = f.read(1)
if tampon == "": break
print tampon
print type(tampon)
Tu verras que le type tampon, qu'il lit dans le fichier ouvert en mode rU, c'est STR. Il lit une chaîne de caractères. D'ailleurs, tu peux aussi demander f.read(n), avec n caractères à lire.
Je ne comprends pas ce que tu veux dire quand tu dis que le CHAR (ou le code hexa) affiché n'est qu'une représentation... ?
##
Christophe
fichier = "document.txt"
f = open (fichier, "rU")
while (1):
tampon = f.read(1)
if tampon == "": break
print tampon
print type(tampon)
Tu verras que le type tampon, qu'il lit dans le fichier ouvert en mode rU, c'est STR. Il lit une chaîne de caractères. D'ailleurs, tu peux aussi demander f.read(n), avec n caractères à lire.
Je ne comprends pas ce que tu veux dire quand tu dis que le CHAR (ou le code hexa) affiché n'est qu'une représentation... ?
##
Christophe
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
11 mai 2008 à 12:39
11 mai 2008 à 12:39
Oui c'est un str, read retourne toujours un str.
Un octet est une valeur et cette valeur tu peux la représenter de diverses manière. Exemple si c'est 128 en décimal, ça donnera 0x80 en hexa, 1000 0000 en binaire etc...
Pour plus de simplicité, python l'affiche en hexa, voire en char s'il trouve une correspondance ascii de la valeur.
Un octet est une valeur et cette valeur tu peux la représenter de diverses manière. Exemple si c'est 128 en décimal, ça donnera 0x80 en hexa, 1000 0000 en binaire etc...
Pour plus de simplicité, python l'affiche en hexa, voire en char s'il trouve une correspondance ascii de la valeur.
Moui c'est vrai qu'avec python, les variables ne sont pas déclarées. Ca m'a toujours gêné, ça.
Mais pour moi, un STR, c'est un STR ! C'est composé d'une suite de CHAR, qui sont eux même des valeurs ASCII [0..255] codées sur un octet.
C'est sûr qu'en mémoire, c'est toujours la même chose, mais c'est interprété différement. Enfin, je ne comprends toujours pas cette distinction... ?
##
Christophe
Mais pour moi, un STR, c'est un STR ! C'est composé d'une suite de CHAR, qui sont eux même des valeurs ASCII [0..255] codées sur un octet.
C'est sûr qu'en mémoire, c'est toujours la même chose, mais c'est interprété différement. Enfin, je ne comprends toujours pas cette distinction... ?
##
Christophe
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
11 mai 2008 à 17:26
11 mai 2008 à 17:26
C'est sûr qu'en mémoire, c'est toujours la même chose, mais c'est interprété différement. Enfin, je ne comprends toujours pas cette distinction... ?
Tu l'as dit: c'est interprété différemment.
Quand tu lis un fichier binaire, la valeur 65 peut être le caractère A, ou un pixel bleu ou une note de musique... tout dépend de l'interprétation que tu en fera.
Mais ce n'est pas Python qui peut savoir: C'est le programmeur qui va donner un sens à ces octets. :-)
Tu l'as dit: c'est interprété différemment.
Quand tu lis un fichier binaire, la valeur 65 peut être le caractère A, ou un pixel bleu ou une note de musique... tout dépend de l'interprétation que tu en fera.
Mais ce n'est pas Python qui peut savoir: C'est le programmeur qui va donner un sens à ces octets. :-)
11 mai 2008 à 12:05
Lire un fichier en binaire, c'est lire tous les CHAR, non interprétés. Je vais lire CHAR(13), par exemple, et pas \n. Je viens de le comprendre :)
Et effectivement, à partir de là, je dois convertir en binaire tous mes ORD(char)... snif :)
Merci.
##
Christophe
11 mai 2008 à 12:20
Tu lis ton fichier et là tu as une suite d'octet. En faisant un print dessus, tu verras la représentation sous forme de char ou bien sous forme hexadécimale s'il n'arrive pas à trouver de code ascii correspondant à l'octet.
Si tu veux une représentation sous forme binaire, c'est à toi de la programmer. Mais ça n'est qu'une représentation.