Seite 1 von 1
Aus Liste Datumsvergleich im Zeitstrahl
Verfasst: Dienstag 29. Mai 2018, 09:06
von Omm
Hallo zusammen
Ich möchte aus einer Liste(log.txt) das Datum/ die Zeit vergleichen.
log.txt sieht so aus:
Do, 12.04.2018, 17:50:46; xxxxx
Do, 12.04.2018, 17:59:47; yyyyy
Do, 12.04.2018, 18:54:53; gggg
Fr, 13.04.2018, 17:12:30; fffff
Fr, 13.04.2018, 17:32:31; xxx; xx
Fr, 13.04.2018, 17:49:31; xxx; aa
...
Ziel:
return Wert ist dann True/Fals.
Vergleich:
die Zeitstempelung (Zeitstrahl) muss immer später sein. D.h von oben nach unten == später in der Zeitachse. Wenn dem nicht so ist, solle ein Fals zurück kommen.
Kann mir da bitte jemand helfen.
Gruss
Omm
Re: Aus Liste Datumsvergleich im Zeitstrahl
Verfasst: Dienstag 29. Mai 2018, 09:13
von sls
Was hast du denn bisher versucht, um dein Ziel zu erreichen? Irgendwas programmiert, wenn ja, was hat nicht funktioniert?
Du kannst die Textdatei mit with open zeilenweise einlesen, ist der zu letzt eingelesene Zeitstempel jünger als der aktuelle, kannst du ein False ausliefern. Deiner Beschreibung nach möchtest du schauen, ob die Liste nach Datum absteigend sortiert ist, sprich, jüngster Eintrag ganz unten (?)
Re: Aus Liste Datumsvergleich im Zeitstrahl
Verfasst: Dienstag 29. Mai 2018, 09:37
von Omm
soweit bin ich gekommen, aber ich bin mir nicht sicher, ob ich nicht generell auf dem Holzweg bin.
ja genau, das jüngere Datum nach unten.
def check_lodgatei_datumeintrag_ok(self, logdatei):
zeilenvergleich_datum = list(logdatei)
print(zeilenvergleich_datum)
for i in zeilenvergleich_datum:
zeileneintrag_b = i[4:24]
print(zeileneintrag_b)
j = time.strptime(zeileneintrag_b, "%d.%m.%Y, %H:%M:%S")
i = time.strptime(zeileneintrag_b, "%d.%m.%Y, %H:%M:%S")
print(i,"<-->",j)
status = True
return status
Re: Aus Liste Datumsvergleich im Zeitstrahl
Verfasst: Dienstag 29. Mai 2018, 10:18
von sls
@Omm: es gibt in deinem Code keine Auswertung, ob der eingelesene Wert der letzten Iteration der aktuell eingelesenen Zeit entspricht, `status` wird also immer True sein. `i` und `j` haben überdies beide den identischen Wert, was du jedoch brauchst ist eine Variable die den Wert des letzten Schleifendurchlaufs beinhaltet, damit er mit dem Zeitstempel des aktuellen Schleifendurchlaufs verglichen werden kann.
`i` als Variablenbezeichner innerhalb des Schleifendurchlaufs sollte überdacht werden, ebenso wie `j`, da sie nicht aussagen wofür die Variablen gedacht sind.
Re: Aus Liste Datumsvergleich im Zeitstrahl
Verfasst: Dienstag 29. Mai 2018, 11:48
von Omm
ja richtig, die Auswertung kommt nach print, soweit bin ich noch nicht.
d.h. wenn ich es nicht mal schaffe zwei zeilen in einem loop auzulesen, kann ich nicht vergleichen.
bin gerade auf dem Status:
def check_lodgatei_datumeintrag_ok(self, logdatei):
zeilenvergleich_datum = list(logdatei)
naechster_eintrag_in_log = time.strptime(zeilenvergleich_datum[1][4:24], "%d.%m.%Y, %H:%M:%S")
for i in zeilenvergleich_datum:
aktueller_eintrag = time.strptime(i[4:24], "%d.%m.%Y, %H:%M:%S")
if aktueller_eintrag < naechster_eintrag_in_log:
naechster_eintrag_in_log = aktueller_eintrag
print(aktueller_eintrag,"--", naechster_eintrag_in_log, i)
else:
return False
dennoch kommt immer ein False.
Re: Aus Liste Datumsvergleich im Zeitstrahl
Verfasst: Dienstag 29. Mai 2018, 12:36
von sls
Deinen Code in Python-Tags setzen, das ist sonst kaum zu debuggen.
Lösungsvorschlag:
Code: Alles auswählen
import datetime
def compare_timestamps(logfile):
last_entry = None
for date in logfile:
timestamp = datetime.datetime.strptime(date[4:24], "%d.%m.%Y, %H:%M:%S")
if last_entry is not None:
if last_entry > timestamp:
return False
last_entry = timestamp
return True
with open('test', 'r') as log:
logfile = log.readlines()
print(compare_timestamps(logfile))
Dieses Beispiel gibt True aus, wenn der jeweils letzte Eintrag kleiner, also "älter" ist als der aktuelle Eintrag. Andernfalls False.
Es besteht kein Bedarf das Logfile in eine Liste zu übergeben.
Re: Aus Liste Datumsvergleich im Zeitstrahl
Verfasst: Dienstag 29. Mai 2018, 13:57
von Sirius3
sls hat geschrieben: Dienstag 29. Mai 2018, 12:36Es besteht kein Bedarf das Logfile in eine Liste zu übergeben.
Warum machst Du es dann?
Code: Alles auswählen
import datetime
from itertools import tee
def check_timestamps(lines):
timestamps = (
datetime.datetime.strptime(line[4:24], "%d.%m.%Y, %H:%M:%S")
for line in lines
)
timestamps_1, timestamps_2 = tee(w)
next(timestamps_2)
return all(t1 > t2 for t1, t2 in zip(timestamps_1, timestamps_2))
with open('test', 'r') as log:
print(check_timestamps(log))
Re: Aus Liste Datumsvergleich im Zeitstrahl
Verfasst: Dienstag 29. Mai 2018, 14:18
von sls
Sirius3 hat geschrieben: Dienstag 29. Mai 2018, 13:57
Warum machst Du es dann?
Damit meinte ich das hier:
zeilenvergleich_datum = list(logdatei)
Ja: ich sehe warum eine Liste jetzt überhaupt sinnlos ist.
Re: Aus Liste Datumsvergleich im Zeitstrahl
Verfasst: Dienstag 29. Mai 2018, 14:29
von kbr
@Sirius3: jetzt noch die Flüchtigkeitsfehler aufräumen: an tee solltest Du timestamps übergeben und da timestamps_2 voraus läuft, wäre t1 < t2 richtig.
Re: Aus Liste Datumsvergleich im Zeitstrahl
Verfasst: Dienstag 29. Mai 2018, 21:50
von Omm
vielen vielen Dank für die Hilfe.
Ich war ja total auf dem Hozweg.
nochmals Danke
