IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Lecture d'un fichier ligne à ligne


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 24
    Points : 22
    Points
    22
    Par défaut Lecture d'un fichier ligne à ligne
    Bonjour,

    Problème de noob mais je ne comprends pas, j'ai lu la doc technique des fonctions read, readlines ... mais rien à faire, chaque boucle que j'écris, aussi simple soit-elle s'arrête sur la première ligne vide ...


    Le fichier que je souhaite lire ligne à ligne :


    ---------------- contenu -----------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # bla bla bla
    lecteur=titi
     
    # bla bla bla
    titi=toto
    ...

    ---------------- fin du contenu -----------

    Bout de code qui m'énerve :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	while 1 :
    		ligne=f.readline()
    		print "DEBUG=>"+ligne
    j'ai essayé plusieurs trucs ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while ligne=f.readline() :
    		print "DEBUG=>"+ligne
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for ligne in f.readlines() :
    		print "DEBUG=>"+ligne
    A chaque fois, ça s'arrête à la ligne vide.

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Salut à toi !
    Bah écoute j'avoue que ça me semble bizarre....

    Personellement j'utilise un script qui écrit dans un log file puis qui le rouvre pour récupérer des lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            f = open(path,'r')
            lignes  = f.readlines()
            f.close()
     
            for ligne in lignes:
    Et apres je mets mes if dans le for pour récupérer les lignes qui m'interressent. J'ai également des lignes vides dans ce fichier, mais ça fonctionne.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    J'ai essayé avec python 2.6, python 2.7 sous windows 2000 (pas le choix :'( ) et aussi sur un Linux. Même résultat.

    J'ai mis des retours charriots windows et linux, même résultat ...

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Oui je suis sous 2.6/XP.
    Je pense pas que ça vienne de la version de windows qd meme...

    Quand j'écris dans mon logfile, je récupère en fait la sortie d'une console. Si ça se trouve je n'ai pas de ligne réellement vide mais probablement des \r\n. Mais si tu as essayé les retours charriots, ça vient ptètre pas de là.


    EDIT :
    Je viens d'essayer. Quand j'affiche la liste "lignes", ça me met bien des "\n" pour les lignes vides. Chez moi, l'affichage print "DEBUG=>"+ligne se fait donc bien jusqu'au bout du fichier. Bizarre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    f = open("test.txt",'r')
    lignes  = f.readlines()
    f.close()
     
    print lignes
     
    for ligne in lignes:
        print "DEBUG=>"+ligne
    Fichier test.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # bla bla bla
    lecteur=titi
     
    # bla bla bla
    titi=toto
    ...

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    Citation Envoyé par Azerty32 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            f = open(path,'r')
            lignes  = f.readlines()
            f.close()
     
            for ligne in lignes:
    Et apres je mets mes if dans le for pour récupérer les lignes qui m'interressent. J'ai également des lignes vides dans ce fichier, mais ça fonctionne.
    bonjour,

    personnellement, je préfère l'approche suivante moins gourmande en ram pour les gros fichiers et plus concise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    f = open(path,'r')
    for line in f:
        #traitement
    f.close()
    ou même:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open(path,'r') as f:
        for line in f:
            # traitement
    plus concis encore mais pas "backportable" sur les anciennes versions de Python (<2.6 si je ne m'abuse)

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Points : 145
    Points
    145
    Par défaut
    Bonjour,

    Pour lire un fichier texte ligne par ligne voici un bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/python
    # -*- coding:Utf-8 -*-
     
    with open("fichier.txt") as f:
    	for line in f:
    		print ("DEBUG=>"+line)
    Le contenu de fichier.txt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # bla bla bla
    lecteur=titi
     
    # bla bla bla
    titi=toto
    ...
    Et voici le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DEBUG=># bla bla bla
     
    DEBUG=>lecteur=titi
     
    DEBUG=>
     
    DEBUG=># bla bla bla
     
    DEBUG=>titi=toto
     
    DEBUG=>...
    Bon je n'ai rien inventé, il suffit de lire la documentation, c'est présenter au tout début du chapitre 5.9 sur les objets fichiers.

    Salutations.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    J'ai fini par trouver ... j'avais une erreur dans le code qui suivait, erreur était gérée et qui me faisait penser que le problème ne venait pas de là ...

    Merci pour vos réponses.

  8. #8
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    avec readline voici le code correct, dans ton code (1er post) tu crées une boucle infinie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    f=open("test.txt", "r")
    while 1:
        data=f.readline()
        if not data:
            break
        print data
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. Problème de lecture d'un fichier texte ligne à ligne
    Par petit rabot dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 25/05/2011, 14h04
  2. [AC-2000] Export Access vers fichier txt ligne à ligne
    Par jorge54 dans le forum VBA Access
    Réponses: 14
    Dernier message: 23/01/2010, 02h15
  3. [ksh] Lecture d'un fichier unicode ligne par ligne
    Par Arnaud F. dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 30/07/2008, 20h46
  4. Lecture d'un fichier binaire ligne par ligne
    Par hacksi dans le forum Langage
    Réponses: 4
    Dernier message: 06/03/2008, 12h08
  5. lecture d'un fichier txt ligne par ligne
    Par SoBaKa dans le forum Général Python
    Réponses: 4
    Dernier message: 06/03/2007, 12h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo