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
Aus Liste Datumsvergleich im Zeitstrahl
- sls
- User
- Beiträge: 480
- Registriert: Mittwoch 13. Mai 2015, 23:52
- Wohnort: Country country = new Zealand();
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 (?)
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 (?)
When we say computer, we mean the electronic computer.
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

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
- sls
- User
- Beiträge: 480
- Registriert: Mittwoch 13. Mai 2015, 23:52
- Wohnort: Country country = new Zealand();
@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.
`i` als Variablenbezeichner innerhalb des Schleifendurchlaufs sollte überdacht werden, ebenso wie `j`, da sie nicht aussagen wofür die Variablen gedacht sind.
When we say computer, we mean the electronic computer.
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.
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.
- sls
- User
- Beiträge: 480
- Registriert: Mittwoch 13. Mai 2015, 23:52
- Wohnort: Country country = new Zealand();
Deinen Code in Python-Tags setzen, das ist sonst kaum zu debuggen.
Lösungsvorschlag:
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.
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))
Es besteht kein Bedarf das Logfile in eine Liste zu übergeben.
When we say computer, we mean the electronic computer.
Warum machst Du es dann?sls hat geschrieben: Dienstag 29. Mai 2018, 12:36Es besteht kein Bedarf das Logfile in eine Liste zu übergeben.
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))