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 :

Afficher 10 dernières lignes


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 33
    Par défaut Afficher 10 dernières lignes
    Bonjour à tous,

    Actuellement je boss sur un boss sur un projet en python pour la création automatique de ticket incident et pour ma partie log je dois afficher les 10 dernières lignes du fichier. Un fichier log peut faire à peut prêt 1500 ligne voir plus en fonction de certain job ControlM... j'ai beau chercher un peu partout sur internet je n'arrive pas à trouver d'où je viens vous demander de l'aide ... Pour le moment j'arrive à afficher toute les lignes mais pas les 10 dernières

    Si une âme charitable pourrait me donner un indice sa serait super cool

    Merci d'avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par Fataly Voir le message
    Si une âme charitable pourrait me donner un indice sa serait super cool
    Sur internet, cherchez "python tail -f", çà vous sort des tas d'exemples comme celui ci.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 33
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Sur internet, cherchez "python tail -f", çà vous sort des tas d'exemples comme celui ci.

    - W
    Merci je n'y avait pas penser je regarde de suite et je reviens vers vous Merci

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Si les lignes n'ont pas toutes la même longueur, ou si l'encodage est en utf-8 avec des caractères accentués, la seule solution est de charger toutes les lignes et de ne retenir que les 10 dernières pour affichage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fichierlog = "fichierlog.log"
    with open(fichierlog, "r") as fs:
        lignes = [ligne.rstrip() for ligne in fs.readlines()]
    lignes = lignes[-10:]
     
    for ligne in lignes:
        print(ligne)
    Mais dans la mesure où on est sûr que toutes les lignes occupent le même nombre d'octets sur le disque, on peut faire mieux avec seek, qui permet de se positionner à la fin du fichier, moins 10 fois la longueur de chaque ligne (fin de ligne comprise!). C'est plus délicat à programmer, mais c'est probablement plus rapide. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fichierlog = "fichierlog.log"
    lgligne = 6 # y compris la fin de ligne: '\n' (Unix) ou '\r\n' (Windows)
    with open(fichierlog, "rb") as fs:
        fs.seek(-10*lgligne, 2)
        lignes = [ligne.rstrip().decode() for ligne in fs.readlines()]
     
    for ligne in lignes:
        print(ligne)
    Il faut bien sûr mettre à jour la longueur des lignes (ici 6 pour l'exemple).

    Au cas où il y aurait des caractères accentués (mais pas en utf-8!), il faudrait mettre un encodage dans le decode().

    Une dernière précaution: si le fichier log ne se termine pas par une ligne vide (donc: curseur à la fin de la dernière ligne), la dernière fin de ligne sera absente (1 ou 2 octets selon l'OS), et il faudra en tenir compte dans le calcul du retrait!

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 33
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    Si les lignes n'ont pas toutes la même longueur, ou si l'encodage est en utf-8 avec des caractères accentués, la seule solution est de charger toutes les lignes et de ne retenir que les 10 dernières pour affichage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fichierlog = "fichierlog.log"
    with open(fichierlog, "r") as fs:
        lignes = [ligne.rstrip() for ligne in fs.readlines()]
    lignes = lignes[-10:]
     
    for ligne in lignes:
        print(ligne)
    Mais dans la mesure où on est sûr que toutes les lignes occupent le même nombre d'octets sur le disque, on peut faire mieux avec seek, qui permet de se positionner à la fin du fichier, moins 10 fois la longueur de chaque ligne (fin de ligne comprise!). C'est plus délicat à programmer, mais c'est probablement plus rapide. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fichierlog = "fichierlog.log"
    lgligne = 6 # y compris la fin de ligne: '\n' (Unix) ou '\r\n' (Windows)
    with open(fichierlog, "rb") as fs:
        fs.seek(-10*lgligne, 2)
        lignes = [ligne.rstrip().decode() for ligne in fs.readlines()]
     
    for ligne in lignes:
        print(ligne)
    Il faut bien sûr mettre à jour la longueur des lignes (ici 6 pour l'exemple).

    Au cas où il y aurait des caractères accentués (mais pas en utf-8!), il faudrait mettre un encodage dans le decode().

    Une dernière précaution: si le fichier log ne se termine pas par une ligne vide (donc: curseur à la fin de la dernière ligne), la dernière fin de ligne sera absente (1 ou 2 octets selon l'OS), et il faudra en tenir compte dans le calcul du retrait!
    Je vais regarder et comprendre le code avant de l'utiliser , merci beaucoup pour la réponse. Je reviendrais également vers vous pour vous donnez une réponse

    Poste Modifier à 14h25

    J'ai bien analysé le code et je l'ai adapter pour qu'il fonctionne comme je veux et c'est niquel du coup j'ai utiliser ce code la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fichierlog = "fichierlog.log"
    with open(fichierlog, "r") as fs:
        lignes = [ligne.rstrip() for ligne in fs.readlines()]
    lignes = lignes[-10:]
     
    for ligne in lignes:
        print(ligne)
    Merci beaucoup pour ton aide +1 maintenant il me reste le soucis qu'il m'affiche mes logs lignes par lignes et non en une lignes

    Dans ce style j'aimerais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    LA CONNEXION SE FERA AVEC USER = GMUP00_USER                   
     ET SCHEMA : AIFPRD00_APPLI                
     EN MODE SQL*NET
    CONNEXION A GMUP00_USER                   OK
    LA CONNEXION SE FERA AVEC USER = GMUP00_USER                   
     ET SCHEMA : AIFPRD00_APPLI                
     EN MODE SQL*NET
    CONNEXION A GMUP00_USER                   OK
     
    ======= Fin de la fonction technique de fin (fzzterm) code retour : 0 =======
    Au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['LA CONNEXION SE FERA AVEC USER = GMUP00_USER', ' ET SCHEMA : AIFPRD00_APPLI', ' EN MODE SQL*NET', 'CONNEXION A GMUP00_USER OK', 'LA CONNEXION SE FERA AVEC USER = GMUP00_USER', ' ET SCHEMA : AIFPRD00_APPLI', ' EN MODE SQL*NET', 'CONNEXION A GMUP00_USER OK', '', '======= Fin de la fonction technique de fin (fzzterm) code retour : 0 =======', '', '', '']
    Merci également à wiztricks

Discussions similaires

  1. [JScrollPane] [JTable] Se placer à la dernière ligne
    Par wishnight dans le forum Composants
    Réponses: 9
    Dernier message: 24/12/2015, 18h42
  2. [JList] rendre visible la dernière ligne ajoutée
    Par Mille sabords dans le forum Composants
    Réponses: 3
    Dernier message: 12/04/2005, 10h32
  3. Réponses: 14
    Dernier message: 30/03/2005, 21h50
  4. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57
  5. l'identifiant unique de la dernière ligne insérée
    Par dim_italia dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 23/08/2004, 17h55

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