Lire une ligne spécifique dans un fichier texte

Signaler
Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
-
Messages postés
74
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
-
bonjour,
je veut lire un fichier mais pas tout les lignes de ce fichier seulement la ligne 3 et le troisième mot de la quatrième ligne mais je n'arrive pas à trouver comment faire ça s'il veut plait si vous pouvez m'aidez à réaliser ça .
merci pour votre collaboration
A voir également:

1 réponse

Messages postés
16
Date d'inscription
dimanche 11 mars 2007
Statut
Membre
Dernière intervention
22 mai 2014
20
Bonjour,
Pour lire une seule ligne dans un fichier, il est possible d'utiliser readline() qui ne lit qu'une ligne à la fois (utile si le fichier est très lourd):
with open(fichier,'r') as fich:
for i in range(3):
ligne = fich.readline()
A la fin de la boucle, "ligne" contiendra la 3ème ligne.
Sinon, si le fichier est plus léger, readlines() retourne une liste dont chaque élément est une ligne du fichier.


En ce qui concerne l'extraction d'un mot, la fonction split(sep) est très utile. Elle fractionne une chaîne, en utilisant le séparateur (sep) fourni. Par défaut, "sep" est un espace. Donc pour extraire le 4ème mot d'une ligne:
liste_mots = ligne.split()
mot=liste_mots[3]
Messages postés
74
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
14
+1

Mais pour le 4e mot, je ferais ainsi :
liste_mots = ligne.split(maxsplit=4)
# Maxsplit va limiter le nombre de split à 4 pour que la fonction ne fasse rien d'inutile (pas obligatoire, mais dans certain cas on y gagne bcp)

mot = liste_mots[3] if len(liste_mots) > 3 else ""
# On gère le cas où il n'y a pas de quatrième mot
Messages postés
16
Date d'inscription
dimanche 11 mars 2007
Statut
Membre
Dernière intervention
22 mai 2014
20
Bien vu le maxsplit... Je ne connaissais pas.
C'est effectivement très important.. Il peut arriver d'avoir un très grand nombre de valeurs sur une ligne, si on doit lire la 4eme valeur sur un grand nombre de lignes, la différence doit vraiment se faire sentir. Merci yepo

Concernant la gestion d'erreur, on peut aussi faire:

try:
    liste_mots = ligne.split(maxsplit=4)[3]
except IndexError:
    # gestion de l'erreur
Messages postés
74
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
14
En effet, le bloc "try except" est intéressant si l'on doit changer de comportement si il n'y a pas assez de mots.
Voici ce que je ferais dans ce cas :

def handle_error():
    """ Comportement si il n'y a pas assez de mots """

    # Gestion de l'erreur

    return resultat # Optionel

liste_mots = ligne.split(maxsplit=4)
mot = liste_mots[3] if len(liste_mots) > 3 else handle_error()


Mon but est d'essayer d'éviter les blocs try except lorsqu'on peut le remplacer facilement par un bloc if else (choix personel, les deux options s'équivalent).