Fichierbin=open("phrase.txt","rb")# ouverture en lecture seule, en binaire
contenu_binaire=Fichierbin.read()
print(contenu_binaire)
>>>
b"Une seule phrase, accentu\xc3\xa9e \xc3\xa0 l’envie quand m\xc3\xaame.\n"
Cela peut paraˆıtre un peu d´ecevant, cela n’a pas l’air d’une chaˆıne binaire, mais c’est seule-
ment un choix d’affichage de Python. Ce qui est important, c’est le bqui est devant, qui dit
que c’est une chaˆıne binaire, cf. cours du chap. 7. §5.4, autrement dit un objet de la classe
bytes. La convention de repr´esentation de Python est la suivante :
●les octets de valeurs num´eriques comprises entre 32 et 127 (ascii de base) sont repr´esent´es
par le caract`ere correspondant du code ASCII,
●certains octets de valeur num´erique inf´erieure `a 32 sont aussi repr´esent´es de mani`ere conver-
tionnelle comme le caract`ere de fin de ligne (ASCII 10, convention Python,\n).
●les autres octets sont repr´esent´es par leur valeur hexad´ecimale, pr´ec´ed´ee de \x.
Ce qui compte : `a partir d’une chaine de type bytes on peut extraire un par un le
codage binaire de chaque ´el´ement de la chaˆıne.
Comment faire ? Si cest une chaˆıne de type bytes,c[i] va renvoyer le num´ero de i. Donc
`a l’aide d’une boucle
l=[]
for oct in contenu_binaire:
l.append(oct)
print(l)
>>> (executing cell "parcours de la ch..." (line 102 of "script-TP7.py"))
[85, 110, 101, 32, 115, 101, 117, 108, 101, 32, 112, 104, 114, 97, 115, 101, 44, 32, 97, 99, 99, 101, 110, 116, 117, 195, 169, 101, 32, 195, 160, 32, 108, 39, 101, 110, 118, 105, 101, 32, 113, 117, 97, 110, 100, 32, 109, 195, 170, 109, 101, 46, 10]
Cependant, pour l’objectif du c) on voudrait que ces nombres soient ´ecrit en binaire sur huit
bits : mais cela, on sait le faire !
def huitbit(n):
"""prend un entier n entre 0 et 255 et l’´ecrit sous la forme d’une chaine de caract`ere en binaire avec exactement huit bits"""
binaire=bin(oct)[2:]# renvoie une cha^ıne de caract`eres contenant
# l’´ecriture binaire mais elle n’est peut-^etre pas assez longue
formate_en_huit=binaire.zfill(8)
return formate_en_huit
##
# programme principal
seq=""
for oct in contenu_binaire:
seq+=huitbit(oct)
print(seq)
On dispose enfin d’une chaˆıne de caract`eres form´ee de 0 et de 1 o`u chaque octet (huit
caract`eres) est le num´ero utf des caract`eres de notre chaˆıne initiale
●(M2)Avec la m´ethode encode sur les chaˆıne de caract`eres (cf. cours chap. 7).
C’est en gros la mˆeme chose qu’`a la (M1) sauf qu’on ouvre le fichier texte pour fabriquer
une chaˆıne str puis on encode la chaˆıne en chaˆıne bytes.
●(M3) Avec la commande ord qu’on connaˆıt. Une autre commande utile dont je n’ai pas
parl´e est la commande format, distincte de la m´ethode format.
>>> format(32,’08b’)
’00100000’
On obtient alors imm´ediatement :
5