Un fichier texte se lit de façon séquentiel, en partant du début vers la fin. Il n'y a pas de retour en arrière possible (sauf en refermant le fichier pour l'ouvrir à nouveau) et il n'est a priori pas possible d'accéder aux lignes par des indices comme pour les tableaux ou les listes.
Il est par contre possible de lire les lignes et les stocker dans un tableau pour y accéder ensuite par des indices.
La lecture d'un fichier texte en une fois s'effectue par la commande readlines()
L'exemple ci-dessous peut être copié dans une console python pour test. Le premier paragraphe consiste au préalable à créer un fichier texte qui sera lu ensuite. Pour faire les choses simples, la structure du fichier test est la suivante (vous pouvez l'ouvrir avec un éditeur de texte) :
Première ligne ! Seconde ligne... Essayons un tableau T,X,Y 0,0.2,0.3 1,0.5,0.6 2,0.9,1.2 3,1.4,1.5 Fin du fichier
# Ecriture d'un fichier test
fic=open("test_fichier.txt","w")
fic.write("Première ligne !\nSeconde ligne...\nEssayons un tableau\n\
T,X,Y\n0,0.2,0.3\n1,0.5,0.6\n2,0.9,1.2\n3,1.4,1.5\nFin du fichier")
fic.close()
# Lecture du fichier test
fic=open("test_fichier.txt","r") # Ouverture en lecture
texte=fic.readlines() # Lecture de l'ensemble des lignes
fic.close() # Fermeture du fichier (ne pas oublier)
# En tapant la variable texte dans la console, le contenu apparait
texte
print(texte[0]) # Affichage de la première ligne
print(texte[1]) # Affichage de la seconde ligne
# Pour lire un tableau de données, il faut découper les lignes et les convertir en nombres
texte[4:8] # Les lignes 5 à 8 qui nous intéressent...
T=[]; X=[]; Y=[] # Initialisation des listes
for i in range(4,8):
ligne=texte[i].rstrip("\n") # Suppression du retour à la ligne
ligne=ligne.split(",") # Découpage au niveau des virgules
T.append(int(ligne[0])) # Conversion en int et ajout au tableau T
X.append(float(ligne[1])) # Conversion en float et ajout au tableau X
Y.append(float(ligne[2])) # idem Y
# Conversion éventuelle en tableaux "array"
T=array(T)
X=array(X)
Y=array(Y)
Sous Windows, les retours à la ligne sont parfois écrits "\n\r". Les séparateurs peuvent être des virgules, mais aussi des points-virgules, ou encore des tabulations "\t". Certains logiciels francisés utilisent la virgule comme séparateur décimal, alors que python (comme la plupart des langages et logiciels) attendent un point. Il est alors nécessaire de remplacer les "," par des "." par la commande replace (par exemple : texte[0].replace("i","u"))
La lecture d'une ligne d'un fichier texte s'effectue par la commande readline() (noter l'absence de "s")
L'exemple ci-dessous peut être copié dans une console python pour test.
# Ecriture d'un fichier test
fic=open("test_fichier.txt","w")
fic.write("Première ligne !\nSeconde ligne...\nEssayons un tableau\n\
T,X,Y\n0,0.2,0.3\n1,0.5,0.6\n2,0.9,1.2\n3,1.4,1.5\nFin du fichier")
fic.close()
# Lecture du fichier test
fic=open("test_fichier.txt","r") # Ouverture en lecture
ligne=fic.readline() # Lecture de la première ligne
print(ligne) # Affichage de la première ligne
ligne=fic.readline() # Lecture de la seconde ligne
print(ligne) # Affichage de la seconde ligne
# Pour lire le reste du fichier sans connaitre sa taille :
ligne="un texte non nul"
while ligne!="": # tant que la chaine lue est non nulle
ligne=fic.readline() # Lecture d'une ligne
print(ligne) # Affichage de la ligne pour vérification
fic.close() # Fermeture du fichier (ne pas oublier)
Cette fonction fait l'objet d'une page d'exemple dédiée : revenir au formulaire pour consulter l'aide de cette fonction.