Ouvrir et parcourir un fichier existant
Rappel : Qu'est-ce qu'un fichier texte ?
Un fichier texte est un fichier qui contient des caractères imprimables et des espaces organisés en lignes successives, ces lignes étant séparées les unes des autres par un caractère spécial non-imprimable appelé marqueur de fin de ligne.
Ouvrir un fichier texte en lecture seule
Pour simplement lire un fichier, on pourra utiliser l'argument 'r' de telle sorte :
##----- Ouverture du fichier en lecture seule -----##
MonFichier = open('MonTexte.txt', 'r')
##----- Programme Principal -----##
...
##----- Fermeture du fichier précédendemment ouvert -----##
MonFichier.close()
Parcourir simplement un fichier texte
Un fichier texte étant, selon la définition, une succession de lignes successives, nous allons pouvoir parcourir un fichier de manière très simple
##----- Ouverture du fichier en lecture seule -----##
MonFichier = open('MonTexte.txt', 'r')
##----- Programme Principal -----##
##----- Affichage de toutes mes lignes -----##
for ligne in MonFichier:
print(ligne)
print('---------------')
##----- Fermeture du fichier précédendemment ouvert -----##
MonFichier.close()
Ainsi, nous avons affiché les lignes les unes à la suite des autres.
Exemple :
Reprenons l'exemple des fichiers de table de multiplication. Nous allons récupérer ces lignes pour les mettre dans une nouvelle liste.
On suppose disposer d'un fichier table8.txt dont le contenu est le suivant :
8*1=8.
8*2=16.
8*3=24.
8*4=32.
8*5=40.
8*6=48.
8*7=56.
8*8=64.
8*9=72.
8*10=80.
On suppose que 8*1=8. est la toute première ligne du fichier (pas de ligne blanche au-dessus).
On aimerait récupérer le contenu de ce fichier et placer chaque ligne dans une cellule d'une liste t :
t[0]='8*1=8.', t[1]='8*2=16.', ..., t[9]='8*10=80.'
Pour cela, il nous faut ouvrir le fichier en mode lecture (option 'r') puis utiliser l'instruction de lecture d'une ligne :
# création d'une liste vide
t=[]
# ouverture du fichier en lecture :
f=open('table8.txt','r')
# récupération des lignes
for j in range(10) :
ligneSuivante=f.readline()
t.append(ligneSuivante)
# fermeture du fichier
f.close()
# impression de la liste pour contrôle :
print(t)
Ce qui donne :
['8*1=8.\n', '8*2=16.\n', '8*3=24.\n', '8*4=32.\n', '8*5=40.\n', '8*6=48.\n', '8*7=56.\n', '8*8=64.\n', '8*9=72.\n', '8*10=80.\n']
À l'affichage du résultat, on se rend compte que les fins de lignes font partie des lignes et sont donc récupérées en même temps que le contenu "réel" de la ligne. L'élément t[0] est ainsi la chaîne '8*1=8.\n'.
Si l'on veut récupérer le texte sans les fins de lignes, on pourra supprimer systématiquement le dernier caractère de chaque ligne :
# création d'une liste vide
t=[]
# ouverture du fichier en lecture :
f=open('table8.txt','r')
# récupération des lignes
for j in range(10) :
ligneSuivante=f.readline()[:-1]
t.append(ligneSuivante)
# fermeture du fichier
f.close()
# impression de la liste pour contrôle :
print(t)
Ou mieux : on utilise la fonction rstrip qui permet de supprimer à la fin d'une chaîne les caractères désignés. Voici un programme synthétique :
# création d'une liste vide :
t=[]
with open('table8.txt','r') as f :
for ligne in f:
t.append(ligne.rstrip('\n'))
# impression de la liste pour contrôle :
print(t)
Complément : Création automatique d'une liste des lignes d'un fichier
Avec l'instruction readlines() (au pluriel cette fois), toutes les lignes sont récupérées en une fois dans une liste :
# ouverture du fichier en lecture :
f=open('table8.txt','r')
# récupération des lignes dans un tableau :
t=f.readlines()
# fermeture du fichier
f.close()
# impression de la liste pour contrôle :
print(t)
Le programme précédent permet donc d'obtenir :
['8*1=8.\n', '8*2=16.\n', '8*3=24.\n', '8*4=32.\n', '8*5=40.\n', '8*6=48.\n', '8*7=56.\n', '8*8=64.\n', '8*9=72.\n', '8*10=80.\n']
Attention : Que du string pour les méthodes write() et read()
Avec la méthode write() et la méthode read() présentées ci-dessus, on ne peut écrire ou lire dans un fichier que des variables de type str. Ainsi, ce programme :
# ouverture du fichier en écriture :
f=open('essai.txt','w')
a=3
print(f.write(a))
# fermeture du fichier
f.close()
Donne une erreur :
print(f.write(a))
TypeError: must be str, not int
On pourra donc faire du trans-typage avec la fonction str(), à l'inverse, si on n'a que des nombres dans un fichier, on pourra, après les avoir lus, les trans-typer en entier avec int().