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 :

Repérer la dernière ligne d'un fichier


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut Repérer la dernière ligne d'un fichier
    Bonjour,
    je dois parcourir un fichier ligne par ligne. J'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for oneLine in fileToAnalyse:
        ...
    Je voudrais savoir si oneLine est la dernière ligne ou non du fichier. Est-ce possible ? Par contre, je ne cherche pas à enregistrer la toute dernière ligne.

    Toute réponse est la bienvenue.

  2. #2
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    en sortant de ta boucle, oneLine sera la dernière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for oneline in fileToAnalyse:
        doSomething(oneline)
    if oneline:
        doSomethingWithEndLine(oneline)

  3. #3
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Pour savoir si l'on est sur la dernière ligne, personnellement je te proposerais cette solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    f = open(r'e:\temp1\test1.py')
     
    oldl = ""
    for l in f:
        if oldl:
            print "pas derniere -> " + oldl[:-1]
        oldl = l
     
    if oldl:
        print "    derniere -> " + oldl
     
    f.close()
    Ce qui permets par exemple d'avoir un traitement différent si l'on est ou pas sur la dernière ligne, ce que ne permets pas, d'après moi, la solution de pacificator.

    [Edit]Ajout d'informations par rambc entre temps, du coup ça répond pas vraiment à la question !!

  4. #4
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Pas mal cette méthode mais il est vrai que j'ai changé de problème entre temps. Désolé. I beg your pardon...

  5. #5
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Pour répondre à la deuxième question, c'est en gros la première réponse un peu modifié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    def lis_fichier(filename):
        f = open(filename)
     
        buffer = []
     
        for l in f:
            buffer.append(l)
            if l.strip():
                for l in buffer:
                    yield yield l.rstrip('\r\n')
                buffer = []
     
        f.close()
     
    for l in lis_fichier(r'e:\temp1\test1.py'):
        print "* " + l
    P.S. : J'ai encore une petite erreur, mais suis en train de regarder !!
    P.S.2: Voilà corrigé.

  6. #6
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Parcourir tout le fichier peut vite devenir long.
    Pourquoi ne pas plutôt aller à la fin, puis revenir petit à petit en arrière pour trouver la première ligne non vide. Quand on connait sa position, on peut alors tronquer le fichier à la bonne dimension.

  7. #7
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par DelphiManiac Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    def lis_fichier(filename):
        f = open(filename)
     
        buffer = []
     
        for l in f:
            buffer.append(l)
            if l.strip():
                for l in buffer:
                    yield l.rstrip('\r\n')
                buffer = []
     
        f.close()
     
    for l in lis_fichier(r'e:\temp1\test1.py'):
        print "* " + l
    P.S.2: Voilà corrigé.
    J'étais passé à côté de cette correction qui marche. Cela semble être l'implémentation de l'idée que je proposais en toute honnêteté juste avant.

    Merci pour ce code !

    J'ai une dernière question. Quel est le rôle du yield ? Je suis un peu fâché avec ces petites bêtes.

  8. #8
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par rambc Voir le message
    Par contre, je ne cherche pas à enregistrer la toute dernière ligne.
    Je vais modifier ma question.

    Comment retirer les lignes vides à la toute fin d'un fichier ?

  9. #9
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Citation Envoyé par rambc Voir le message
    Bonjour,
    je dois parcourir un fichier ligne par ligne. J'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for oneLine in fileToAnalyse:
        ...
    Je voudrais savoir si oneLine est la dernière ligne ou non du fichier. Est-ce possible ? Par contre, je ne cherche pas à enregistrer la toute dernière ligne.

    Toute réponse est la bienvenue.
    1er message

  10. #10
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Oui, et troisième message:
    Je vais modifier ma question.

    Comment retirer les lignes vides à la toute fin d'un fichier ?
    Bref... j'ai pas l'intention de batailler sur des choses aussi stupides.
    J'ai passé une solution à la question qu'il pose. Soit j'ai bon, soit pas.
    Dans ce dernier cas, soit je comprends quedal à ce que les gens disent, soit il ferait sérieusement mieux d'apprendre à formuler ses question.
    Au vu du faut que je parle français couramment et que je n'ai aucun souci pour comprendre la plupart des gens, je pencherais pour la deuxième option.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SPOOL : Effacer dernière ligne vide du fichier.
    Par Ujitsu dans le forum Sql*Plus
    Réponses: 6
    Dernier message: 30/07/2007, 18h15
  2. Effacer la dernière ligne d'un fichier texte
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/05/2007, 11h52
  3. Supprimer 1ère et dernière ligne d'un fichier
    Par yabbiyou dans le forum MATLAB
    Réponses: 3
    Dernier message: 02/03/2007, 09h05
  4. Comment lire la dernière ligne d'un fichier text.
    Par Ardely dans le forum Delphi
    Réponses: 29
    Dernier message: 20/01/2007, 23h29
  5. Réponses: 2
    Dernier message: 19/09/2006, 15h04

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