Die Deutsche Datum und Zeit mit time.strptime lesen -- wie??

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
vak
User
Beiträge: 9
Registriert: Sonntag 11. März 2007, 20:56

Hallo,

wie kann man die "locale" so einrichten, das das Folgende

Code: Alles auswählen

>>>  time.strptime(u'12. M\xe4r. 08:57', "%d. %b. %H:%M")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "p:\devel\Python\2.5\lib\_strptime.py", line 310, in strptime
    (data_string, format))
richtig laufen könnte?

Danke in voraus!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

vak hat geschrieben:wie kann man die "locale" so einrichten, das das Folgende

Code: Alles auswählen

>>>  time.strptime(u'12. M\xe4r. 08:57', "%d. %b. %H:%M")
richtig laufen könnte?
Hallo vak!

Ich würde mich nicht mit locale spielen, sondern schlicht und einfach u"Mär" vorher zu u"Mar" übersetzen.

Code: Alles auswählen

replacements = (
    (u"ä", u"a"),
    ...
    (u"Dez", u"Dec"),
)
s = u'12. Mär. 08:57'
for old, new in replacements:
    s = s.replace(old, new)
Danach kannst du den Text ganz gemütlich mit ``strptime`` in ein Datum umwandeln.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
vak
User
Beiträge: 9
Registriert: Sonntag 11. März 2007, 20:56

gerold, Danke!

Mein beste Ergebnis nach "schema F" ist:

Code: Alles auswählen

locale.setlocale(locale.LC_ALL, 'german')
time.strptime(u'12. Mrz. 08:57', "%d. %b. %H:%M")
aber den "M\xe4r" kann time.strptime sogar mit "%B" nicht aufessen :(
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

vak hat geschrieben:aber den "M\xe4r" kann time.strptime sogar mit "%B" nicht aufessen
Hi vak!

Das liegt daran, dass time.strptime für die Monatsnamen das calendar-Modul verwendet. Dieses gibt die Monatsnamen aber nicht in Unicode zurück, sondern in einem anderen Coding. Du müsstest, um "M\xe4rz" (z nicht vergessen) angeben zu können, das "u" vor dem String weg lassen.

Aber es gibt auch noch andere Fallstricke. Z.B. heißt in Österreich der Januar Jänner. Dafür müsstest du mit ``locale.setlocale(locale.LC_ALL, "german_austria")`` arbeiten. Wie auch immer, ich würde die Strings schlicht ersetzen und dann mit den englischen Monatsbezeichnungen weiter arbeiten. Zumindest so lange, bis die Unicode-Unterstützung auch bis ins calendar-Modul vorgedrungen ist. (Stand: Python 2.4.4)

mfg
Gerold
:-)

PS: Weiß jemand eine bessere Lösung? :K
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
vak
User
Beiträge: 9
Registriert: Sonntag 11. März 2007, 20:56

gerold hat geschrieben:Du müsstest, um "M\xe4rz" (z nicht vergessen) angeben zu können, das "u" vor dem String weg lassen.
in meinem Log-Datei sind die Monate mit 3 Buchstaben eingegeben.
Antworten