Fichiers - open¶
Pouvoir lire et/ou écrire dans un fichier est indispensable lorsqu’on souhaite, par exemple, récupérer/sauvegarder des informations entre deux exécutions d’un même programme. On parle alors de persistance de l’information.
Lire/écrire du texte dans un fichier¶
Créer un nouveau fichier et y écrire -
fich = open(<nom_fichier>, 'w')etfich.write(chaine):>>> # Dans quel dossier suis-je ? >>> from os import getcwd >>> getcwd() '/home/etienne/Python/Fichiers' >>> # votre fichier sera créé dans ce répertoire. >>> f = open('test.txt', 'w') # 'w' pour write -> écrire. >>> # f est un ojet qui représente le fichier créé. >>> f.write('Je découvre la gestion des fichiers.') 36 >>> f.write('Ça paraît assez simple ...') 26 >>> # C'est fini ? fermer votre fichier! >>> f.close()
Lire un fichier existant -
fich = open(<nom_fichier>)etfich.read():>>> f = open('test') # oups ... Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: [Errno 2] No such file or directory: 'test' >>> f = open('test.txt') # ou open('test.txt', 'r') >>> contenu = f.read() >>> contenu 'Je découvre la gestion des fichiers.Ça paraît assez simple ...' >>> f.read() '' >>> # car vous avez déjà tout lu ... il est temps de fermer ! >>> f.close()
Ajouter du texte à un fichier existant -
fich = open(<nom_fichiers>, 'a'):>>> f = open('test.txt', 'a') # 'a' pour append -> ajouter >>> f.write('\nligne2\nligne3\n\nblah blah') # rappel \n symbolise le caractère saut de ligne. 25 >>> f.close() >>> f = open('test.txt') >>> print(f.read()) Je découvre la gestion des fichiers.Ça paraît assez simple ... ligne2 ligne3 blah blah >>> f.close()
Récupérer la liste des lignes d’un fichier -
fich.readlines():>>> f = open('test.txt') >>> lignes = f.readlines() >>> lignes # noter que les caractères de saut de lignes - \n - sont conservés. ['Je découvre la gestion des fichiers.Ça paraît assez simple ...\n', 'ligne2\n', 'ligne3\n', '\n', 'blah blah'] >>> f.close()
Parcourir les lignes d’un fichier -
for ligne in fich:>>> copie = open('copie', 'w') >>> orig = open('test.txt') >>> i = 0 >>> for lgn in orig: ... i += 1 ... lgn = str(i) + ": " + lgn ... copie.write(lgn) ... >>> orig.close() >>> copie.close()
Options courantes d’ouverture d’un fichier -
open(<nom_fichier>, option):Option Signification 'r'ouverture en lecture (par défaut) 'w'ouverture en écriture (un fichier existant est perdu) 'x'ouverture en écriture sécurisée (erreur si le fichier existe) 'a'ouverture en ajout à la fin du fichier s’il existe 'b'mode binaire - on lit ou écrit via une chaîne d’octes bytes't'mode texte (par défaut) 'wt'est équivalent à'w'. Pour voir un fichier comme une chaîne d’octets, utiliser'rb','wb', etc.
Sauvegarder/restaurer des «objets»¶
pickle est un module qui facilite considérablement la sauvegarde/récupération de données Python par l’intermédiaire de fichiers.
Avertissement
Les fichiers doivent être ouverts en mode binaire - 'b'.
Sauvegarder une ou des données dans un fichier -
pickle.dump(donne, fichier):>>> import pickle >>> donnees = {"nom": 'Dupond', "Prénom": 'andré', "age": 32} >>> fsauv = open('donnees.pickle', 'wb') # ouverture en mode binaire !! >>> pickle.dump(donnees, fsauv) >>> fsauv.close()
Restaurer une donnée sauvée via pickle -
pickle.load(fichier):>>> import pickle >>> f = open('donnees.pickle', 'rb') # mode lecture binaire !! >>> restaure = pickle.load(f) >>> restaure {'nom': 'Dupond', 'age': 32, 'Prénom': 'andré'} >>> f.close()
Notion de chemin¶
Pour ouvrir un fichier qui ne se trouve pas dans le répertoire courant, il faut être capable d’indiquer où il se trouve dans l’arborescence du disque c’est à dire son chemin.
Voici un exemple (volontairement très simple !) d’organisation d’un disque:
dossier1/
fichier1.txt
...
ss_dossier/
fichier2.ppm
...
fichier3.py
...
Les noms complets des fichiers dépendent d’un dossier de référence:
- Chemin absolu - depuis la «racine» du disque notée
/:
- de fichier1.txt :
/dossier1/fichier1.txt- de fichier2.ppm :
/dossier1/ss_dossier/fichier2.ppm- chemin relatif - à partir d’un dossier particulier (souvent le dossier courant):
- de fichier1.txt à partir de dossier1 :
fichier1.txt- de fichier3.py à partir de dossier1 :
../fichier3.py(..~ dossier parent)- de fichier3.py à partir de ss_dossier :
../../fichier3.py
Note
Un programme possède toujours un dossier de référence appelé répertoire courant. C’est normalement le dossier qui contient le fichier du programme. Pour s’en assurer:
import os
# ...
rep_courant = os.getcwd() # cwd pour current working directory
print(rep_courant)