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