En savoir plus

La lecture de fichiers

Ce qui se passe vraiment quand Python ouvre un fichier - des octets aux caracteres, de l'ASCII a l'UTF-8, du CSV aux donnees ouvertes.

Qu'y a-t-il vraiment dans un fichier ? Octets, ASCII, UTF-8#

Un fichier, quel qu'il soit - texte, image, tableur - n'est qu'une suite d'octets. Un octet est un nombre entier de 0 a 255. Le texte que tu lis n'existe pas vraiment sur le disque : c'est une convention qui dit "le nombre 65, ca correspond a la lettre A". Sans cette convention partagee, une suite d'octets ne veut rien dire.

ASCII : la premiere convention (1963)

ASCII (American Standard Code for Information Interchange) a ete publie en 1963. Il utilise 7 bits, ce qui permet de coder exactement 128 caracteres : les lettres anglaises, les chiffres, la ponctuation, et quelques codes de controle (saut de ligne, tabulation, etc.).

Quelques reperes a retenir :

CaractereCode decimalCode hexadecimalNote
Espace320x20le premier caractere imprimable
'0'480x30le chiffre zero (pas le nombre nul)
'A'650x41debut des majuscules
'a'970x61debut des minuscules (+32 par rapport a 'A')

Astuce : ord('A') donne 65 en Python, et chr(65) redonne 'A'. Pratique pour comprendre ce qu'il se passe sous le capot !

Le tableau complet des caracteres imprimables (codes 32 a 126)

Genere dynamiquement en JavaScript. Chaque cellule montre : code decimal, code hexadecimal, caractere.

Unicode et UTF-8 : le monde entier (1992)

ASCII ne couvre que l'anglais. Pour l'accente, le japonais, l'arabe, les emoji - il fallait plus. Unicode assigne un numero unique a chaque caractere de toutes les langues du monde. UTF-8 est la facon de stocker ces numeros en octets : il a ete concu par Ken Thompson et Rob Pike en 1992.

UTF-8 est malin : les 128 premiers caracteres (l'ASCII original) restent codes sur 1 seul octet, exactement comme avant. C'est un encodage retro-compatible. Les caracteres accentues francais prennent 2 octets, les caracteres asiatiques 3 octets, certains emoji 4 octets.

Fait precis a retenir
Le caractere e accent aigu (e) s'ecrit en UTF-8 avec exactement 2 octets : 0xC3 0xA9. En decimal : 195 et 169.

Le bug des accents : le mojibake

Le mojibake (mot japonais, "caracteres transformes") se produit quand un fichier encode en UTF-8 est lu comme si c'etait du Latin-1 (ISO-8859-1). Le mot foret (avec accent) devient forêt, et le seul e (2 octets en UTF-8) est interprete comme deux caracteres Latin-1 distincts.

# Mauvaise lecture - sans preciser l'encodage sur certains systemes Windows foret = open("donnees-foret.csv") # peut lire en Latin-1 par defaut # Bonne lecture - toujours preciser l'encodage foret = open("donnees-foret.csv", encoding="utf-8")

Sur Linux et macOS la valeur par defaut est generalement UTF-8, mais sur certains Windows le systeme utilise Windows-1252 ou Latin-1. Mieux vaut toujours preciser.

Demo - Encodage UTF-8 et lecture erronee (mojibake)

Ecris un mot avec des accents. La demo montre les octets UTF-8 reels et ce qu'on lirait si on interpretait ces octets en Latin-1 (ISO-8859-1).

Texte correct (UTF-8)
-
Octets UTF-8 (hex)
-
Lecture erronee (Latin-1)
-

A quoi ressemble vraiment un JSON et un XML#

Le cours presente CSV, JSON et XML comme trois fagons de stocker des donnees structurees. Voici les memes donnees - un inventaire de deux arbres - dans les trois formats, pour comparer visuellement.

CSV - compact (tableur)
espece,hauteur,age erable,12,40 pin,18,65
JSON - structure et leger
[ { "espece": "erable", "hauteur": 12, "age": 40 }, { "espece": "pin", "hauteur": 18, "age": 65 } ]
XML - verbeux, tres descriptif
<foret> <arbre> <espece>erable</espece> <hauteur>12</hauteur> <age>40</age> </arbre> <arbre> <espece>pin</espece> <hauteur>18</hauteur> <age>65</age> </arbre> </foret>
FormatPoints fortsUsage typique
CSV Ultra-compact, lisible dans un tableur Donnees tabulaires, exportations, data science
JSON Structure, leger, supporte l'imbrication APIs web, configuration, echanges entre serveurs
XML Tres descriptif, balises explicites, validation stricte Documents bureau (docx, odt), flux RSS, systemes d'entreprise

En Python, lire un JSON ne prend qu'une ligne apres l'importation du module :

import json with open("foret.json", encoding="utf-8") as fichier: donnees = json.load(fichier) # donnees devient une liste de dictionnaires Python print(donnees[0]["espece"]) # erable
A retenir
JSON est aujourd'hui le format universel des API web. Quand tu interroges la NASA, Meteo Canada ou Twitter, la reponse arrive en JSON. Savoir le lire en Python est une competence directement utile.

Les donnees ouvertes : la foret en chiffres#

Les donnees ouvertes (ou open data) sont des jeux de donnees reels, publics et gratuits, mis en ligne par des gouvernements, des universites ou des organismes publics. Ce ne sont pas des exemples inventes - ce sont de vraies mesures de terrain.

Ou trouver des donnees au Quebec

Donnees Quebec (donneesquebec.ca) est le portail officiel du gouvernement du Quebec. On y trouve des centaines de jeux de donnees : transport, sante, environnement, education.

Dans le domaine forestier, le Quebec produit un inventaire ecoforestier : un recensement systematique des forets, avec l'essence des arbres, la densite, la superficie, les perturbations recentes (coupe, incendie, epidEmie de la tordeuse). C'est exactement le genre de fichier CSV que tu pourrais charger avec les outils du cours.

Reflexe a adopter
1. Aller sur donneesquebec.ca (ou ouvert.canada.ca pour le federal)
2. Chercher un sujet qui t'interesse
3. Telecharger le fichier CSV
4. open("fichier.csv", encoding="utf-8") comme dans le cours
5. Tracer un graphique (pont vers le jour 5 !)
import csv import matplotlib.pyplot as plt # Exemple avec un fichier telecharge depuis donneesquebec.ca with open("inventaire-foret.csv", encoding="utf-8") as fichier: lecteur = csv.DictReader(fichier) especes = [] hauteurs = [] for rangee in lecteur: especes.append(rangee["espece"]) hauteurs.append(float(rangee["hauteur"])) plt.bar(especes, hauteurs) plt.title("Hauteur moyenne par espece") plt.show()

Pourquoi c'est important

DomaineCe qu'on peut faire avec des donnees ouvertes
Science citoyenne Verifier les affirmations des politiciens avec les vrais chiffres
Data-journalisme Raconter une histoire chiffree (Le Devoir, Radio-Canada font ca)
Recherche Croiser plusieurs jeux de donnees pour trouver des correlations
Sciences appliqueEs Modeliser, predire, simuler a partir de donnees de terrain reelles

Le terme data-journalisme designe la pratique consistant a analyser des donnees publiques pour produire des articles d'enquete. Des equipes comme celle du New York Times ou de Radio-Canada utilisent exactement les memes outils que ce que tu apprends : Python, CSV, graphiques.

Portails a explorer
donneesquebec.ca - portail quebecois
ouvert.canada.ca - portail federal canadien
data.montreal.ca - donnees de la Ville de Montreal
kaggle.com/datasets - jeux de donnees de la communaute data science