Seite 1 von 1
strings und zeit
Verfasst: Freitag 30. Dezember 2011, 08:06
von ercmrj
Ich habe eine Textfile und in jede Zeile ist eine Zeit.
Jetzt ist es mir gelungen um die Zeit aus jedem Zeile heraus zu nehmen aber wie kan ich damit rechnen.
Zum beispiel "09:15:27" - "08:04:13" = 01:11:14
Ist es notwendig um die Uhren, Minuten und Seconden zu trennen oder ist da einen einfacheren Weg.
Re: strings und zeit
Verfasst: Freitag 30. Dezember 2011, 09:20
von beliar
Mit den strings alleine kann man nicht rechnen, aber python bietet Klassen an die eine Zeit repräsentieren und mit denen gerechnet werden kann.
Diese Klassen können auch einen String parsen, welcher z.B. aus einer Datei ausgelesen wurde.
Ein Beispiel ist die datetime Klasse aus dem datetime modul.
Re: strings und zeit
Verfasst: Freitag 30. Dezember 2011, 13:17
von ercmrj
Ja, Ich habe für 2 Tage gesucht in datetime, aber ich kan kein Beispiel finden. Von Zeit nach String kan ich finden aber die andere nicht.
Re: strings und zeit
Verfasst: Freitag 30. Dezember 2011, 13:26
von deets
Du suchst time.strptime - damit bekommst du ein time-tuple, und das kannst du benutzen um ein datetime.datetime Objekt zu erzeugen.
Re: strings und zeit
Verfasst: Freitag 30. Dezember 2011, 13:29
von BlackJack
@ercmrj: Die Methode dafür heisst `strptime()`. In der Dokumentation zu dieser Methode steht zu was der Aufruf äquivalent ist. Wenn man bei der dort verwendeten Funktion in der Dokumentation nachliest, findet man ein Beispiel und den Hinweis auf die Umkehrfunktion wo dann auch die möglichen Platzhalter beschrieben werden.
@deets: `datetime` hat eine statische Methode `strptime()`.
Re: strings und zeit
Verfasst: Freitag 30. Dezember 2011, 13:41
von deets
@BlackJack: hat es? ich schwoere ich habe oft genug danach gesucht... aber es scheint seit 2.5 da zu sein. Danke!
Re: strings und zeit
Verfasst: Freitag 30. Dezember 2011, 15:48
von ercmrj
Dieses Beispiel habe ich gefunden:
import time
print time.strptime("Tue Jun 16 20:18:03 1981")
aber dan bekomme ich:
time.struct_time(tm_year=1981, tm_mon=6, tm_mday=16, tm_hour=20, tm_min=18, tm_sec=3, tm_wday=1, tm_yday=167, tm_isdst=-1)
Wie setzen ich jetzt die value(z.b. tm_min=18) in einer separaten Variablen.
Und jetzt muss ich immer noch alles umrechnen nach Secunden und zuruck.
Re: strings und zeit
Verfasst: Freitag 30. Dezember 2011, 16:34
von deets
BlackJack hat mich ja korrigiert - es gibt diese Methode auch direkt auf datetime.datetime - sieht genauso aus. Schau bitte in die Doku des datetime Moduls.
Re: strings und zeit
Verfasst: Freitag 30. Dezember 2011, 18:56
von problembär
Bei mir unter Python 2.4 geht folgendes:
Code: Alles auswählen
#!/usr/bin/python
# coding: iso-8859-1
import time
import datetime
def strptimeToDatetime(s):
t = time.strptime(s)
return datetime.datetime(t[0], t[1], t[2], t[3], t[4], t[5], t[6])
d = strptimeToDatetime("Tue Jun 16 20:18:03 1981")
print d
d2 = strptimeToDatetime("Fri Dec 30 09:15:27 2011")
d3 = strptimeToDatetime("Fri Dec 30 08:04:13 2011")
print d2 - d3
(Noch nicht klar ist mir, wie man tzinfo (t[7]) auch noch einbindet.)
Re: strings und zeit
Verfasst: Freitag 30. Dezember 2011, 20:47
von ercmrj
Wunderbar, vielen Dank.
Das ist genau was ich suche.
Re: strings und zeit
Verfasst: Samstag 31. Dezember 2011, 00:56
von Dav1d
Nein das suchst du _nicht_, du suchst
http://docs.python.org/library/datetime ... e.strptime. Außerdem passt man normalerweise noch einen
Format-String.
@problembär, meinst du nicht 2.4 ist etwas alt? Außerdem entspricht dein Code nicht der
PEP-8
Re: strings und zeit
Verfasst: Samstag 31. Dezember 2011, 01:16
von problembär
Dav1d hat geschrieben:@problembär, meinst du nicht 2.4 ist etwas alt?
Schon, läuft aber immer noch gut.
Dav1d hat geschrieben:Außerdem entspricht dein Code nicht der
PEP-8
Na und, PEP-8 kann mich mal.
So wie oben dargestellt klappt das bei dem OP, und es ist auch das, was er sucht.
Re: strings und zeit
Verfasst: Samstag 31. Dezember 2011, 02:15
von deets
@Dav1d
problembaer macht sich einen Spass daraus, veralteten und unpythonischen Code zu schreiben. Es ist natuerlich schade, dass er damit Neulingen schlechten Stil beibringt - aber verhindern kann man's halt nicht.
Re: strings und zeit
Verfasst: Samstag 31. Dezember 2011, 03:23
von gkuhl
@ercmrj: Die folgenden Lösung ist vermutlich etwas übersichtlicher:
Code: Alles auswählen
import datetime
d1 = datetime.datetime.strptime('08:04:13', '%H:%M:%S')
d2 = datetime.datetime.strptime('09:15:27', '%H:%M:%S')
print d2 - d1
Re: strings und zeit
Verfasst: Samstag 31. Dezember 2011, 11:25
von Dav1d
deets hat geschrieben:@Dav1d
problembaer macht sich einen Spass daraus, veralteten und unpythonischen Code zu schreiben. Es ist natuerlich schade, dass er damit Neulingen schlechten Stil beibringt - aber verhindern kann man's halt nicht.
Anscheinend …
Re: strings und zeit
Verfasst: Samstag 31. Dezember 2011, 15:32
von Hyperion
deets hat geschrieben:... aber verhindern kann man's halt nicht.
Wir können es immerhin anprangern und unmittelbar widersprechen; somit hat der Neuling immerhin die Chance, der dunklen Seite der Macht zu widerstehen

Re: strings und zeit
Verfasst: Samstag 31. Dezember 2011, 15:51
von sma
Da eine gute Antwort ja schon gegeben wurde, erlaube ich mir folgende Frage: Wieso sucht man
zwei Tage (also 16 Stunden?) lang (vergeblich) nach einer Lösung, wenn es wesentlich schneller geht, das Problem lieber selbst zu lösen? Es ist ja OK, eine fertige Lösung aus der Standard-Bibliothek zu verwenden, wenn man dadurch Zeit spart, aber irgendwann sollte der Pragmatismus einsetzen und dann macht man's eben selbst.
Zum Beispiel so:
Code: Alles auswählen
def parse_time(ts):
h, m, s = map(int, ts.split(":"))
return ((h * 60) + m) * 60 + s
def format_time(tm):
return "%02d:%02d:%02d" % (tm // 3600, (tm % 3600) // 60, tm % 60)
print format_time(parse_time("09:15:27") - parse_time("08:04:13"))
Einen String aus drei Zahlen durch ":" getrennten Zahlen kann auch ein Anfänger in einen Sekundenwert umwandeln, wenn vielleicht auch nicht so elegant, wie ich meinen Einzeiler mit dem Mappen von int auf die drei Teilstrings finde. Das eine Minute 60 Sekunden hat und eine Stunde 60 Minuten sollte aber ja wohl Grundwissen sein. Und dann kann man mit Hilfe von Division und Modulo-Operationen auch daraus wieder Stunden und Minuten und Sekunden machen (ich benutze // statt / weil der in jeder Python-Version einen int als Ergebnis hat). Das ist einfache Mathematik. Jetzt muss man noch wissen, wie mit mit einem Format-String eine zweistellige Zahl mit führenden Nullen hinbekommt oder wieder ein paar mehr Zeilen benutzen. Doch alles in allem kann das nicht länger dauern als 10 Minuten, wenn man den Algorithmus kennt.
Spätestens nach 30 Minuten Suche würde ich daher abbrechen und es lieber selbst machen.
Stefan
PS: Nun kann man sich natürlich fragen, was passieren soll, wenn ich eine negative Anzahl von Sekunden anzeigen will, und so was macht dann eine eigene Lösung doch aufwendiger. Da bricht dann leider mein Format-String, aber ich überlasse es dem Leser, das zu korrigieren.
Re: strings und zeit
Verfasst: Montag 2. Januar 2012, 11:06
von ercmrj
Noch mal danke für die viele Antworte.
Ich kann das Problem lösen ohne die datetime klasse, aber ich möchte auch mehr erfahren über Pyhton.
Und jetzt nach dem vielen sucharbeit weiss ich auch besser wie ich der Dokumentation verwenden müss