====== Fichier texte ======
===== Manipulation de fichiers =====
Un langage de programmation permet généralement de demander au système d'exploitation l'ouverture et la manipulation de fichier.
On se contentera pour l'instant d'ouvrir des fichiers de textes (contenant seulement une suite de caractères) qui seront suivant le cas :
* des phrases\\ //exemple : on veut analyser les statistiques d'un roman. Nombres de mots, etc.//
* des données\\ //exemple : une suite de cotations boursières séparées par ","//
Les fichiers de données dans lesquels les colonnes sont séparées par "," ou encore ";" sont appelés **CSV** pour **C**omma **S**eparated **V**alues. On leur donne l'extension ''.csv''. Ils sont comme des fichiers tableur (//Excel//...) mais sans mise en forme, formule, graphique...
==== Ouverture de fichier en Python ====
f = open('nom_du_fichier', mode, encoding='utf8')
* ''mode'' permet de sélectionner le mode d'ouverture :
* ''%%'r'%%'' pour lecture -- //read//
* ''%%'w'%%'' pour écriture -- //write//
* ''%%'a'%%'' pour ajout -- //add//
* ''%%'x'%%'' pour création -- //erreur si existe déjà//
* ''encoding'' permet d'indiquer l'encodage à utiliser. ''%%'utf8'%%'' est la valeur par défaut dans les versions récentes de Python -- donc pas besoin de le préciser.
==== Manipulation des lignes d'un fichier texte ====
f.write("chaine de caractère") # ajoute la chaîne de caractère
# au fichier
f.read() # renvoie l'ensemble du texte du fichier
f.read(n) # renvoie les n prochains caractères
f.readline() # renvoie la prochaine ligne
f.readlines() # renvoie l'ensemble des lignes
# sous forme d'un tableau de chaînes.
Ces caractères sont importants :
* ''%%'\n'%%'' : retour à la ligne
* ''%%'\t'%%'' : tabulation
Quand on récupère une ligne de fichier texte, elle contient souvent le ''%%'\n'%%'' final ou des espaces. On peut vouloir s'en débarrasser. Ces commande sont là pour cela :
chaine.strip() # supprime les espaces et ''%%'\n'%%'' en début et fin
chaine.lstrip() # même chose, seulement en début (left)
chaine.rstrip() # même chose, seulement en fin (right)
Et quand on récupère une ligne de fichier ''%%.csv%%'', on veut pouvoir le convertir facilement en tableau. Voici un exemple :
>>> chaine = "Michel,Dupont,12/11/1984,3 rue de la fontaine"
# ci-dessus, chaine reçoit une ligne de données type csv
>>> chaine.split(',')
# on fait un découpe suivant le caractère ','
['Michel', 'Dupont', '12/11/1984', '3 rue de la fontaine']
# ce qui donne un tableau
Le genre de travail que l'on va faire a déjà été fait 1000 fois et sert d'apprentissage. Pour aller plus vite, il y aura des bibliothèques de fonctions toutes faites comme [[https://docs.python.org/fr/3/library/csv.html|csv]].
===== Libérer la ressource =====
Quand Python ouvre un fichier, il demande au **système d'exploitation** (//OS//) de lui donner l'accès à ce fichier. Quand c'est une demande d'écriture, l'OS **verrouille** le fichier pour qu'il n'y ait pas deux programmes écrivant en même temps dans un même fichier. Il est donc important de **libérer** le fichier quand on a fini de l'utiliser.
f.close() # libère le fichier
Pour être certain de ne pas oublier la fermeture, on peut empaqueter l'utilisation de fichier dans une structure de programmation :
with open('nom_du_fichier', mode, encodage='utf8') as f:
# on peut utiliser f tant qu'on est à l'intérieur de ce with
# dès qu'on sort du with, f est fermé.