Uhrzeit plotten

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hi Leute,

    Ich generiere mit folgendem Code die aktuelle Uhrzeit:

    Code
    Zeit_Tupel=localtime()
    
    
    Zeit_Aktuell=trftime("%H:%M:%S", Zeit_Tupel)

    Zuvor natürlich

    Python
    from time import *

    Danach speichere ich die Uhrzeit zusammen mit Messwerten in einer CSV ab.
    Anschließend möchte ich sie mit matplotlib ploten.

    Bekomme aber folgende Fehlermeldung:

    Could not convert string to float : b'15:06:37'

    Könnt ihr mir sagen, woran das liegt? Bzw. was ich machen kann?

  • Hallo,

    Zitat

    Could not convert string to float : b'15:06:37'
    Könnt ihr mir sagen, woran das liegt? Bzw. was ich machen kann?

    Du hast ein Bytes-Objekt, erwartet wird aber ein String - musst du halt konvertieren.

    Schöner ist aber, wie schon gesagt, ein datetime-Objekt mit dem datetime-Modul zu erzeugen.

    Gruß, noisefloor


  • Hallo,


    Du hast ein Bytes-Objekt, erwartet wird aber ein String - musst du halt konvertieren.

    Schöner ist aber, wie schon gesagt, ein datetime-Objekt mit dem datetime-Modul zu erzeugen.

    Gruß, noisefloor

    Code
    import datetime
    
    
    Date = datetime.datetime(???)
    Uhrzeit_String = datetime.datetime.strftime(Date, "%H:%M:%S")
    Uhrzeit = datetime.datetime.strptime(Uhrzeit_String, "%H:%M:%S")
    print(Uhrzeit)

    Habe es mal so probiert. Aber ich brauche ja da aktuelle Datum. Wie bekomme ich das bei datetime? Im Time-Modul geht das ja easy mit localtime().

  • Hallo,

    Zitat

    Aber ich brauche ja da aktuelle Datum


    Das Datum geht so:

    [code=php]>>> import datetime
    >>> datetime.date.today()
    datetime.date(2016, 9, 27)[/php]

    Allerdings brauchst du doch die Uhrzeit, oder?
    Das geht z.B. so:

    [code=php]>>> datetime.datetime.now().time()
    datetime.time(10, 15, 39, 327816)[/php]

    Ist aber auch alles in der Doku des `datetime`Moduls erklärt.

    Gruß, noisefloor

  • Das habe ich mittlerweile auch gefunden.

    Ich möchte aber später in meinem matplotlib Plot auf der X-Achse etwas wie 13:44:10 stehen haben.
    Das geht aber mit einem String von strftime() nicht. Und bei datetime.datetime.now().time() stehen die Millisekunden mit dran.
    Was komischerweise auch nicht geht ist, den String '13:44:10', welchen strftime() liefert in strptime() zu überführen.
    Da kommt trotz dem Format '%H:%M:%S' noch ein Datum vorne dran mit.

  • Hallo,

    wie generierst du denn die CSV-Datei? Bzw. zeigt mal was "nicht geht".

    Das geht nämlich eigentlich ohne Probleme:

    [code=php]>>> import datetime
    >>> now = datetime.datetime.now()
    >>> now
    datetime.datetime(2016, 9, 27, 13, 9, 50, 599566)
    >>> now.strftime('%H:%M:%S')
    '13:09:50'
    >>> [/php]

    Oder ist dein Problem das Lesen der CSV-Datei durch Matplotlib? Dazu hat dir bootsmann ja schon mal einen Link gegeben.

    Wenn du die CSV-Datei nur zum "zwischenspeichern" nimmst, dann solltest du vielleicht einen Unix Timestamp als Datum / Zeit schreiben. Dann hast du die volle Flexibilität bei minimalem Formatierungsaufwand.

    Gruß, noisefloor

    Gruß, noisefloor


  • Ich möchte aber später in meinem matplotlib Plot auf der X-Achse etwas wie 13:44:10 stehen haben.

    Tach'chen,
    ich zeichne schon seit längerer Zeit Raumlkima-Daten auf, die ich dann z.B. mit GNUplot plotte.
    Das Speichern der Daten in einer CSV geht soweit in Ordnung, wobei ich SQLite/ SQL für manche
    Projekte für besser geeignet halte. Den Datensatz kann man sich dann bei Bedarf mit einem SQL-Query
    in eine CSV holen (meist interessiert ja auch nur ein bestimmtes Intervall).

    Aus Erfahrung würde ich das Datum grundsätzlich als Unix-Timestamp speichern, d.h. als Integer-Wert
    der vergangenen Sekunden seit dem 01.01.1970. "Traditionell" unterstützen in der UNIX-Welt
    viele Programme dieses Zeitformat, ggf. muss man manchmal den Offset der EPOCH-Time
    verschieben, z.B. rechnet GNUplot ab dem 01.01.2000. Einen Zeitstempel ohne Nachkommastellen
    kann man mit:

    Code
    import time 
    timestamp = int (time.time())

    erzeugen. Zudem kann man damit viel einfacher rechnen, z.B. um Deinen Plot 24 Stunden
    vor der aktuellen Zeit beginnen zu lassen, muss man vom aktuellen Wert nur (60*60*24)
    86400 Sekunden subtrahieren.

    Zahlen lassen sich naturgemäß auch viel einfacher auf einer Achse plotten. Die "Kosmetik"
    d.h. das Formatieren der Achse, kann man schließlich von der matplotlib erledigen lassen:


    Hoffe das Dir das weiterhilft.
    Beste Grüße,
    /luetzel

  • Fehlermeldung:

    Traceback (most recent call last):
    File "/home/pi/Desktop/Python/CSV_TEST.py", line 31, in <module>
    x,y = np.loadtxt(Link, unpack=True, delimiter=',')
    File "/usr/lib/python3/dist-packages/numpy/lib/npyio.py", line 848, in loadtxt
    items = [conv(val) for (conv, val) in zip(converters, vals)]
    File "/usr/lib/python3/dist-packages/numpy/lib/npyio.py", line 848, in <listcomp>
    items = [conv(val) for (conv, val) in zip(converters, vals)]
    ValueError: could not convert string to float: b'16:48:41.106464'

  • Hallo,

    die Fehlermeldung passt nicht zum Code... Du schreibst `Zeit` in die CSV-Datei, was ein komplettes Datetime-Objekt ist, also Datum plus Uhrzeit.

    Die Fehlermeldung sagt aber, dass da "nur" eine Uhrzeit (als Bytes-Objekt) drin ist - passt nicht zusammen.

    Hast du in der Datei noch andere / alten Daten drin? Du öffnest du Datei ja im Append-Mode.

    Gruß, noisefloor

  • Na wie schon geschrieben, macht wenig Sinn das Datum als formatierten String in einer CSV zu speicher
    Weiß zwar nicht, wie Du das formatieren willst und warum da Stunden auf der Y-Achse geplottet werden,
    aber wenn da ein Datum auf die x-achse zaubern willst, geht das mit ein wenig copy und paste aus dem
    Beispiel. Hab mir das jetzt nicht so genau angeschaut, aber das lässt sich alles noch optimieren.


  • Fehler kann ich nicht reproduzieren. Läuft hier fehlerfrei durch und produziert plot.pdf.

    Dein Skript oder T-Bird92s Skript? Bei letzterem glaube ich das eher nicht, der schreibt ja nach wie vor ein komplettes datetime Objekt in die CSV - das, wie ich annehme, vom csv.writer durch seine __str__ Methode o.ä. gejagt wird.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!