Lire une ligne spécifique dans un fichier texte

Messages postés
52
Date d'inscription
dimanche 27 octobre 2013
Statut
Membre
Dernière intervention
17 juin 2014
- - Dernière réponse : YepoMax
Messages postés
75
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
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
16
Date d'inscription
dimanche 11 mars 2007
Statut
Membre
Dernière intervention
22 mai 2014
15
15
Merci
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]

Dire « Merci » 15

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 220 internautes nous ont dit merci ce mois-ci

YepoMax
Messages postés
75
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
13 -
+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
beschtraffer
Messages postés
16
Date d'inscription
dimanche 11 mars 2007
Statut
Membre
Dernière intervention
22 mai 2014
15 -
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
YepoMax
Messages postés
75
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
14 juin 2014
13 -
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).
Commenter la réponse de beschtraffer