Combiner les messages du journal multiligne sans horodatage dans une ligne en python

voix
1

J'ai un fichier journal qui est dans le format suivant.

Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
     '----action----tansfer'
     '----failed----'
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
   <Error occurred at line 44>
<html>
.....
....
....
</html>
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message

Je dois formater vous enregistrer au format suivant afin que je puisse appliquer une logique de traitement de texte Aval.

Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message '----action----tansfer' '----failed----'
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message <Error occurred at line 44> <html>.... ..... ....</html>
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message

Est-il possible d'obtenir un message vous connecter dans ce format. Je pense à quelque chose comme - si le nouveau caractère de ligne n'est pas suivie d'une date regex remplacer ensuite avec caractère d'espace, mais ne pouvait pas construire tout à fait l'expression rationnelle.

TIA

Créé 20/10/2018 à 03:40
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
2

Le code ci-dessous lire le fichier journal, puis écrire de nouveau dans le fichier out.txt dans le format souhaité. Je re pour cette tâche avec négatif pour préanalyse mer dans la ligne suivante

import re
with open('log.txt', 'r') as f:
    a = f.read()

a = re.sub(r'\n(?!Wed)', '', a)

with open('out.txt', 'w') as f:
    f.write(a)

Sortie:

Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message     '----action----tansfer'     '----failed----'
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message   <Error occurred at line 44><html>.............</html>
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Créé 20/10/2018 à 03:58
source utilisateur

voix
0

Juste mon approche non regex:

with open("./t.txt") as read_file: #Current Log file
    with open("./fix_t.txt", 'w') as write_file: #A new log file
        data = False
        for line in read_file:
            if "message" in line:
                if data: write_file.write(data + "\n")
                data = line.strip("\n")
            else:
                data += line.strip("\n")
        if data: write_file.write(data + "\n")

Résultat dans le nouveau fichier journal:

Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message     '----action----tansfer'     '----failed----'
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message   <Error occurred at line 44><html>.............</html>
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Créé 20/10/2018 à 04:13
source utilisateur

voix
0

Cette chaîne regex ressemble à ce que vous avez besoin:

'.*\d{2}\:\d{2}\:\d{2}\ \d{4}.*'

Il essaie de faire correspondre à cela:

00:59:33 2018 # Any number works as long as it's this format
Créé 20/10/2018 à 04:00
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more