Lecture des fichiers

4.3. Lecture des fichiers#

Avec Python, on peut lire des fichiers en utilisant la fonction open qui peut s’utiliser dans un gestionnaire de contexte :

with open('ascii.md', encoding='iso-8859-1') as fp:
    text = fp.read()

L’intégralité du texte a été placé dans la variable text, séparée par des \n correspondant aux retours à la ligne.

L’affichage de la variable text va mettre en évidence un mauvais choix d’encodage du fichier.

text[200:300]
"lités et premiers caractères\n\nUn ordinateur ne manipule que des nombres binaires, comme `'0b1001'`"

S’il est omis, l’encodage utilisé par la fonction open est celui du système d’exploitation.

with open('ascii.md') as fp:
    text = fp.read()
text[200:300]
"tés et premiers caractères\n\nUn ordinateur ne manipule que des nombres binaires, comme `'0b1001'`, la"

On peut enfin demander à lire le fichier comme une séquence d’octets (bytes).

with open('ascii.md', mode = 'rb') as fp:
    text_as_bytes = fp.read()
text_as_bytes[200:230] # un extrait encore plus court
b'lit\xc3\xa9s et premiers caract\xc3\xa8res'

On peut constater que la longueur de la représentation en octets est supérieur à la longueur de la chaine de caractère.

len(text), len(text_as_bytes)
(5126, 5203)

Un des intérêts de la séquence d’octets est que celle-ci se transformer directement en positions dans les tables ASCII/UTF-8.

list(text_as_bytes[200:230])
[108,
 105,
 116,
 195,
 169,
 115,
 32,
 101,
 116,
 32,
 112,
 114,
 101,
 109,
 105,
 101,
 114,
 115,
 32,
 99,
 97,
 114,
 97,
 99,
 116,
 195,
 168,
 114,
 101,
 115]

L’accès à la valeur stockée dans un octet se fait aisément.

text_as_bytes[200:230][3], text_as_bytes[200:230][4]
(195, 169)

Ces deux valeurs sont associées aux caractères ASCII.

chr(text_as_bytes[200:230][3]), chr(text_as_bytes[200:230][4])
('Ã', '©')

Pourtant, ces deux octets doivent être lus ensemble.

text_as_bytes[200:230][3:5], text_as_bytes[200:230][3:5].decode()
(b'\xc3\xa9', 'é')

L’information sur le codage de caractère permet donc cette transformation adéquate.

Quelques références