Licence CC BY-NC-ND, Thierry Parmentelat & Aurélien Noce
on va faire quoi ?¶
les fichiers et l’OS; comment ouvrir, pourquoi fermer ?
différents formats de fichier usuels
texte simple sans accent, typiquement en anglais (ASCII)
texte standard (utf-8)
pickle (ouille ça pique, c’est du binaire)
json (on se sent un peu mieux)
csv (ah là on parle)
yaml (de plus en plus populaire)
comment parser un format de fichier custom
modalités du TP¶
on ouvre vs-code
on participe
les fichiers et l’OS¶
c’est quoi l’OS ?
votre code ne cause jamais directement au harware
mais toujours au travers d’abstractions exposées par l’OS
parmi lesquelles, entre autres, la notion de “fichier”

questions préliminaires¶
qu’est-ce qu’un fichier ?
que contient un fichier ?
quelles sont les étapes pour y accéder ?
lire un fichier simple¶
(le fichier data/hello.txt fait partie du zip)
ouverture d’un fichier¶
f = open("data/hello.txt")que se passe-t-il ?
pensez à consulter la documentation (comment on la trouve ?)
que peut-on faire de
f?que pensez-vous de cette version alternative ?
# ça marche aussi; quelle différence ? f = open("data/hello.txt", encoding="utf-8")
les types¶
analyser les types des différents objets
type("data/hello.txt") type(f)avancer étape par étape
il faut fermer !¶
que se passe-t-il si on oublie de fermer le fichier ?
on va écrire un code qui ouvre
nfichiers le faire tourner avecn= 10, 100, 1000, ...
pouvez-vous prédire ce qui va passer ?
l’idiome pour lire un fichier: with & for¶
contenu des fichiers texte¶
on va regarder dans les yeux deux fichiers texte:
ASCII¶
installez l’extension vscode Hex Editor
regarder le contenu de
data/hello.txtavec vs-codeutilisez clic droit -> Open With -> Hex Editor
comparez avec https://
www .rapidtables .com /code /text /ascii -table .html
Unicode¶
faites pareil avec data/bonjour.txt
que constatez-vous ?
voyez aussi https://
www .utf8 -chartable .de/
un fichier binaire¶
faites pareil avec data/tiny.pickle
ouvrez-le “normalement” (pour l’instant sans utiliser la librairie
pickle)comment faut-il adapter le code ? indice: il faut utiliser le mode d’ouverture et spécifier binaire
que constatez-vous ? (indice: les types !)
les différents formats de fichier¶
Tout le monde ne crée pas sa propre structure (on dit aussi format) de fichier !
Il existe des formats standard qui permettent une interaction entre les programmes, et même différents langages de programmation !
le format pickle¶
c’est le format intégré de Python:
c’est un format binaire: s’ouvre avec
open(name, 'rb')permet de sérialiser notamment les types de base, c-a-d non seulement des atomes (nombres, chaines...)
mais aussi des structures plus complexes, avec des containers etc...
par contre, il ne va pas convenir pour échanger avec d’autres langages...
à faire:
lisez la documentation du module
pickleessayez de lire le fichier
data/tiny.pickleinspectez les types des objets dans la donnée
pickle : écriture¶
partez de ce que vous venez de lire
modifiez certaines des données
sauvegardez-les dans un nouveau fichier
data/tiny-changed.pickleet relisez-le pour vérifier que “ça marche”
autre format: json¶
à vous de jouer
on va refaire pareil à partir de
data/tiny.jsonlisez-la doc et écrivez le code qui lit ce fichier
modifiez la donnée lue, et sauvez-la
est-ce qu’on peut y mettre un ensemble ? ou un tuple ?
encore un: yaml¶
trouvez la doc de
PyYAMLlisez le fichier
data/tiny.yamlcomment peut-on comparer avec JSON ?
et aussi: les csv¶
on recommence (c’est optionnel, si vous savez déjà lire un csv avec pandas)...
lisez la documentation du module
csv
googlepython module csvessayez de lire le fichier
data/pokemon.csvsauriez-vous créer une dataframe ?
version facile: avec
pd.read_csv()un peu moins simple: sans utiliser
pd.read_csv()
formats custom¶
comment peut-on lire (on dit parse) des formats de fichiers inconnus ?
pour cela, 2 armes
le type
strfournit plein de méthodes - notammentstrip(),split()etjoin()le module
re(pour regular expressions) peut également être utile
exercice: lisez data/notes.txt¶
sans importer de module additionnel,
lisez le fichier
data/notes.txtcréez et affichez un dictionnaire
nom élève → note
exercice: écrivez un programme¶
qui lit sans fin le texte entré dans le terminal
regarde si le texte commence par un
qsi oui c’est la fin du programme
sinon affiche le nombre de mots dans la ligne
et recommence
épilogue: les regexps, en deux mots¶
sans transition..
l’idée est de décrire une famille de chaines
à partir d’une autre chaine (la regexp)
qui utilise des opérateurs
comme p.e.
*pour indiquer ‘un nombre quelconque de fois’ telle ou telle autre regexp
exemple de regexp
ab((cd)|(ef))* décrit un ensemble qui
ne contient que des mots qui commencent par
abcontient
abcdet aussiabefou encore
abcdcdefcdmais pas
abceniabcde