Accès aux fichiers en Python

En lecture

Pour lire un fichier, on utilise la fonction open, qui attend une chaîne en argument: le nom du fichier.

Assurez-vous qu’il y a un fichier dans votre dossier de travail, disons test.py, que vous êtes en train d’écrire. Tentez:

   1 open('test.py')

Si tout se passe bien… il ne se passe rien: on n’a rien fait avec le fichier en question. Il aurait fallu utiliser la valeur obtenue.

Creusons:

   1 f = open('test.py')
   2 print(f)
   3 print(type(f))
   4 help(f)
   5 help(type(f))

L’essentiel:

Par exemple:

   1 nblignes = 1
   2 for ligne in f.readlines():
   3         print(nblignes,':',ligne)
   4         nblignes = nblignes + 1

Ça fait presque ce qu’on veut : seul problème, il y a de bonnes chances pour que ça affiche une ligne vide supplémentaire pour chaque ligne.

En effet, quand Python lit un fichier texte, les lignes arrivent avec leur caractère de fin de ligne (le « retour chariot »). Il y a plein de solutions pour gérer ce cas : cherchez-en.

Autre détail, si on retente la même chose:

   1 nblignes = 1
   2 for ligne in f.readlines():
   3         print(nblignes,':',ligne)
   4         nblignes = nblignes + 1

plus rien ne se produit. En effet, quand on lit, on avance dans le fichier: arrivés au bout, il n’y a plus rien à lire. Il faut ouvrir le fichier à nouveau.

Et puis impossible d’écrire dans le fichier pour l’instant:

   1 f.write('toto')

échoue, parce qu’on ouvre les fichiers en lecture par défaut.

En écriture

Créons un nouveau fichier:

   1 f=open('test.txt','w') # 'w' pour 'write'
   2 f.write('Du contenu\n')
   3 f.write('Ne pas oublier les fins de lignes\n')
   4 f.write('Sinon on n’aurait tout eu sur la même ligne !\n')
   5 f.close()

Ne pas oublier le close final, qui dit au système d’exploitation qu’on a terminé : c’est le moment de sauvegarder.

D’ailleurs, c’est une bonne pratique de toujours fermer un fichier quand on a fini.

Attention, quand on ouvre en mode 'w', on efface tout. Vérifiez le contenu du fichier après:

   1 f=open('test.txt','w') # 'w' pour 'write'
   2 f.write('Une quatrième ligne.\n')
   3 f.close()

Si on veut plutôt rajouter du contenu à la fin du fichier, il faut utiliser le mode 'append':

   1 f=open('test.txt','a') 
   2 f.write('Là on rajoute une ligne.\n')
   3 f.close()

Un peu plus de magie noire

Pour gérer tout ça proprement, il y a un bloc :

   1 with open('test.txt') as f:
   2         for ligne in f:
   3                 print(ligne.strip('\n').upper())

En fait ce n’est pas limité aux fichiers : c’est un mécanisme générique pour gérer des objets qui nécessitent un traitement particulier quand on a fini de les utiliser. Ici, ça assure que le fichier est proprement fermé quoi qu’il arrive.

Et notez qu’on peut faire le for en itérant directement sur f plutôt que sur f.readlines(): un objet de type fichier est itérable (cf. la méthode __iter__).

EnsInfo: Les fichiers (dernière édition le 2019-01-23 10:12:03 par LionelVaux)