2017-06-01 2 views
2

Ich versuche, eine Nummer aus meiner Logdatei zu bekommen. Diese Nummer kommt nach jeder "aktuellen Speichernutzung". Wie kann ich das machen? Kann ich das Modul re verwenden?Suche nach Nummer in einer Textdatei?

Linie aus dem Logfile

2017-05-30 12:01:03,168 | WARN | Store limit is 102400 mb (current store usage is 0 mb). The data directory: /opt/apache-activemq-5.12.0/bin/linux-x86-64/../../data only has 6887 mb of usable space - resetting to maximum available disk space: 6887 mb | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain 

Mein Code

def log_parser(): 
    palab2 = "WARN" 
    logfile = open("/opt/apache-activemq-5.12.0/data/activemq.log", "r") 
    contenlog = logfile.readlines() 
    logfile.close() 
    for ligne in contenlog: 
     if palab2 in ligne: 
      print ("Probleme : " + ligne) 
+1

Lesen Sie nicht die ganze Datei mit 'readlines'. Sie können über jede Zeile iterieren. Und ja, du kannst 're' verwenden. –

Antwort

0

Ja, Sie können das Modul re verwenden, um dies erheblich zu vereinfachen. Und +1 zu @Eric Duminil für den Vorschlag, nicht die gesamte Datei auf einmal einzulesen.

import re 

def log_parser(): 
    palab2 = "WARN" 
    logfile = "/opt/apache-activemq-5.12.0/data/activemq.log" 

    with open(logfile, 'r') as contenlog: 
     for ligne in contenlog: 
      if re.findall(palab2, ligne): 
       print ("Probleme : " + ligne) 
       break 
1

Dies würde für Sie arbeiten:

import re 
ligne = '2017-05-30 12:01:03,168 | WARN | Store limit is 102400 mb (current store usage is 0 mb). The data directory: /opt/apache-activemq-5.12.0/bin/linux-x86-64/../../data only has 6887 mb of usable space - resetting to maximum available disk space: 6887 mb | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain' 
print(re.search(r'current store usage is (\d+)', ligne).group(1)) 
# this returns a 'string', you can convert it to 'int' 

Ausgang:

'0' 

Glückliche Codierung !!!

0

Try this:

import re 

def log_parser(): 
    with open("/opt/apache-activemq-5.12.0/data/activemq.log", "r") as logfile: 
     for line in logfile: 
      m = re.search(r"current store usage is (\d+)", line): 
       if m: 
        return m.group(1) 

print(log_parser()) 

Sie nicht angeben, wenn Sie nur das erste Auftreten wollen (ich davon ausgegangen, so) oder alle diese Zeilen in der Datei. Wenn letzteres zutrifft, ändern Sie einfach return in yield und rufen Sie dann die Funktion wie folgt auf: print(list(log_parser()))

Verwandte Themen