Lire une ligne spécifique dans un fichier texte

nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 - 13 mai 2014 à 21:53
YepoMax Messages postés 74 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 14 juin 2014 - 19 mai 2014 à 17:42
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

beschtraffer Messages postés 16 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 22 mai 2014 23
14 mai 2014 à 13:33
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]
22
YepoMax Messages postés 74 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 14 juin 2014 20
16 mai 2014 à 02:30
+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
0
beschtraffer Messages postés 16 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 22 mai 2014 23
19 mai 2014 à 09:52
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
0
YepoMax Messages postés 74 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 14 juin 2014 20
19 mai 2014 à 17:42
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).
0