Aus 6stelliger Zahl ein Datum erzeugen

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
DrAudio
User
Beiträge: 5
Registriert: Samstag 5. April 2014, 10:00

Hallo,

bei meinen Messungen, wird ein Pfadname mit ID des Werkstückes und ein Timestamp mit Datum und Uhrzeit erzeugt.
Mittels Replace habe ich die notwendigen Angaben wie ID, Datum und Uhrzeit schon extrahiert.

Nun habe ich folgende Struktur so vorliegen:
ID Datum Zeit
345678, 180801, 0945

Ich möchte aber das Datum in dieser Form haben:

01.08.2018

Ebenso die Uhrzeit als:

09:45

Alle anderen Daten aus der Messung habe ich soweit isoliert und kann sie in ein *, csv-file einlesen.
Anschließen muss ich das csv-file in Excel einlesen, um anderen Kollegen meine Daten zur Verfügung zu stellen.

Nur bei der Datumsumwandlung und der Zeitumwandlung komme ich nicht weiter.

Klar kann man das Ganze mit len() machen und dann mühsam in Excel umbasteln - ich denke, da gibt es in Python einen eleganteren Weg.
Die Anwendung der Time-Bibliothek hat mich auch nicht auf die Spur gebracht...

Für eine Idee wäre ich dankbar - vielleicht ist es ja ganz simpel....

Gruß

Tobi
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

replace ist nicht dafür gedacht, irgendwelche Daten zu extrahieren. Wie sehen denn Deine Ursprungsdaten aus?
Für Datumsoperationen gibt es das datetime-Modul, und darin datetime.strptime, das mit dem richtigen Formatstring Dein Problem lösen sollte. Am besten Datum und Uhrzeit als ein String parsen.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das sieht doch nach ganz simplen Zeichenkettenoperationen aus‽ Ich würde das Datum übrigens in der Reihenfolge Jahr, Monat, Tag lassen, denn dann entspricht eine lexikografische Sortierung auch gleichzeitig der zeitlichen Sortierung. Und musst Du Datum und Zeit trennen? Ist doch letztlich *ein* Wert. '2018-08-01T09:45' wäre zudem eine Darstellung nach ISO8601.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@__blackjack__: da kommt es letztlich darauf an, was Excel als Datum versteht, und das ist mit Deutscher Spracheinstellung eben nur '01.08.2018 09:45'.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sirius3: Echt? Ich hätte vermutet das auch ein deutsches Excel da mehr durchprobiert, denn ich weiss das ein Kunde Probleme mit Adresslisten als CSV hatte in denen so etwas wie die Hausnummer 10a von seinem deutschen Excel zu 10 Uhr gemacht wurde weil es das 'a' für 'a.m.' angenommen hat. Die Vermutung hatten wir erhärtet weil bei 10p die Uhrzeit 22 Uhr heraus kam.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@__blackjack__: gerade getestet. Es muß "10:32 pm" mit Leerzeichen heißen, sonst wird keine amerikanisch Zeit erkannt. Hängt wahrscheinlich von der Version und dem Mondstand ab.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Da muss ich an's Python Zen denken, speziell an „In the face of ambiguity, refuse the temptation to guess”. :-)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

ISO8601 sollte Excel beherrschen. Falls nicht, dann hat man ein Produkt erworben,
dass mit internationalen Standards nicht umgehen kann. Würde mich wundern, wenn Excel das nicht kann.

Code: Alles auswählen

datum = '180801' 
zeit = '0945'
dt_format = '%y%m%d%H%M'
zeitpunkt = datetime.datetime.strptime(datum + zeit, dt_format)
zeitpunkt_iso8601 = zeitpunkt.isoformat()
'2018-08-01T09:45:00'

Ist das UTC0 oder mit Zeitzone?
Das sollte man auch wissen, wenn man mit den Daten arbeitet.

Code: Alles auswählen

import pytz
berlin = pytz.timezone('Europe/Berlin')
lokal = berlin.localize(zeitpunkt)
zeitpunkt_lokal_iso8601 = lokal.isoformat()
'2018-08-01T09:45:00+02:00'

Hier sind dann auch die Informationen über die Zeitzone mit drin.
Die Frage ist, ob du das so benötigst.

Kannst natürlich auch Datum und Uhrzeit splitten.

Code: Alles auswählen

datum = zeitpunkt.date()
zeit = zeitpunkt.time()
Formatieren kannst du auch selbst beliebig:

Code: Alles auswählen

zeitpunkt.strftime('%m/%d/%y %H:%S')
Jedenfalls habe ich zwei Sachen gelernt: ISO 8601 nutzen, wo es geht. Zeitzonen sind wichtig.
Hab ich jetzt irgendwas ausgelassen? Ja, pytz ist nicht in der stdlib von Python.

Ganz wichtig: https://docs.python.org/3/library/datet ... me-objects
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Schade das man hier keine Beiträge bewerten kann ;-)
ich würde jetzt einen Daumenhoch oder +1 geben :-)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten