
Envoyé par
tyrtamos
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:
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:
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 :
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 :
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 :
['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 
Partager