Wie sage ich es in Python ? (Einsteigerfragen)

  • So, neuer Versuch :-)


    Ich hätte gerne nur die Uhrzeit aus dem Timestamp von folgender Rückmeldung einer API Abfrage:


    JSON
    [{"target":"statistics.0.temp.minmax.tino.0.Sensor_1.temperature.dayMin","datapoints":[[11.12,1587777917282]]}]

    Jemand eine Idee wie ich das anstellen? 3:25 Uhr müsste da rauskommen, also "3:25" wäre perfekt.


    Gruß

    LED

  • Ich sehe da keinen timestamp. Ich sehe ein große Zahl, die ein timestamp sein könnte, wenn man denn wüsste, wie die zustande kommt. Gibt es auch Dokumentation zu dieser API?

    Kein Support per PN! Von Hilfestellung sollen alle profitieren!

  • Sichere Deine Raspbberry regelmäßig mit raspiBackup . Sicher ist sicher ;-)


    Darum gebe ich keinen Support per PN


    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


  • Na dann. Wir haben eine Liste mit einem Element, das ein Woerterbuch ist, welches zwei Schluessel hat, von denen einer die Werte beinhaltet, die wiederum als Liste von Liste daherkommen, und in der innersten der Listen ist das zweite Element der Timestamp.


    Der Zugriff ist also


    [0]['datapoints'][0][1]


    https://stackoverflow.com/ques…p-string-to-readable-date erklaert, wie wir daraus dann ein datetime-Objekt machen, mit dem man dann die Zeit beliebig darstellen kann.

    Kein Support per PN! Von Hilfestellung sollen alle profitieren!

  • Sehr cool!

    Theoretisch habe ich es verstanden. Aber die Umsetzung klappt noch nicht...


    Code
    MIN1 = [{"target":"statistics.0.temp.minmax.tino.0.Sensor_1.temperature.dayMin","datapoints":[[11.12,1587777917282]]}]
    MIN1 = [0]['datapoints'][0][1]


    Ergebnis: TypeError: list indices must be integers or slices, not str


    Das umrechnen klappt. Durch 1000 wegen der Millisekunden und plus zwei Stunden. Oder wie macht man das mit der Zeitzone?

    Code
    from datetime import datetime
    MIN1 = (int("1587777917282")/1000+7200)
    MIN1 = (datetime.utcfromtimestamp(MIN1).strftime('%H:%M'))

    Ergebnis ist wie gewünscht "3:25"

  • Du musst schon die Variable vor den Ausdruck zum Zugriff schreiben. Einmal das python tutorial auf der offiziellen Webseite zu den involvierten Datenstrukturen durcharbeiten.

    Kein Support per PN! Von Hilfestellung sollen alle profitieren!

  • Du musst schon die Variable vor den Ausdruck zum Zugriff schreiben

    Um es vielleicht ein bisl anschaulicher zu machen:

    Code
    wert = [{"target":"statistics.0.temp.minmax.tino.0.Sensor_1.temperature.dayMin","datapoints":[[11.12,1587777917282]]}]
    min1 = wert[0]['datapoints'][0][1]
    print(min1)
    1587777917282

    Ansonsten bin ich komplett bei __deets__. Das Tutorial zu dem Thema ist schon sehr sinnvoll, vor allem dir Listen und dicts an jeder Ecke begegnen werden.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Guten Abend,


    ich beschäftige mich in letzter Zeit mit Python. Nach einigen Anleitungen bin ich nun dabei mein erstes GUI zu erstellen.

    Es handelt sich dabei um eine einfach Web-Radio-Anwendung. Mit einem Sender funktioniert das auch ganz gut. Jetzt habe ich eine "Combobox" eingebaut und wollte darin eine feste Senderauswahl hinterlegen.

    Mit einem Button bestätige ich die Auswahl und kann sie mir auch anzeigen lassen. Allerdings schaffe ich es nicht, den hinterlegten Link in die Variable "url" zu schreiben.


    Könnt ihr mir da bitte auf die Sprünge helfen? Das ist bist jetzt natürlich kein schönes Programm, da ich mich noch im Aufbau befinde. Wenn ihr jedoch Kritik und Verbesserungen zum Programmierstill habt, dann wäre ich euch auch sehr dankbar. Würde es gerne von Anfang an richtig lernen.


    Danke schon mal für eure Bemühungen :)


    Grüße

    Dennis

    Wasn't ready to be no millionaire =O

  • Wenn ihr jedoch Kritik und Verbesserungen zum Programmierstill habt, dann wäre ich euch auch sehr dankbar. Würde es gerne von Anfang an richtig lernen.

    Vorweg gleich, auf deine konkrete Frage kann ich nicht antworten. GUI Programmierung liegt mir auch nicht wirklich. Jedoch möchte ich deinem Wunsch nach Konstruktive Kritik nachkommen


    Zeile 1:

    Vermeide * Imports, die müllen zum einen den globalen Namespace zu, und bewirkt dass man die Übersicht verliert, welche Funktion/Klasse/Objekt zu welchen Modul zugehörig ist.

    Also besser: import tkinter


    Womit Zeile 2 überflüssig wird.


    Zeile 8 + 9:

    Konstanten schreibt man GROß, Variablen und Funktionsnamen dafür durchgehend klein (siehe Zeile 34, 37, 40). Klassennamen werden in CamelCase geschrieben.


    Zeile 10, url ist keine Konstante, da du sie ja im Verlauf des Programmes verändern willst, womit sie auch nicht mehr im globalen Namensraum sein soll. Ebenso Zeile 11 - 15


    Verwende gleich einen Editor(mit IDE am besten) so hast du gleich eine Syntaxhighlighting und der Editor bekritelt (so wie ich gerade) die Verstöße gegen PEP 8

  • Hofei Vielen Dank für deine ausführliche Beschreibung (:


    hyle Okay, das werde ich morgen machen, versuche davor noch die Verbesserungen von Hofei einfließen zu lassen :thumbup:


    Gute Nacht und Grüße

    Dennis

    Wasn't ready to be no millionaire =O

  • Hey Dennis89

    Kannst du bitte berichten, ob du dein Problem mit der Anweisungen hier in dem Forum gelöst hast? Und wenn nicht, wie hast du es gemacht?

    Hey,


    bin gerade dabei noch ein paar Grundlagen aufzuarbeiten.


    Hier gehts dann Schritt für Schritt mit meinem Problem weiter


    Grüße

    Dennis

    Wasn't ready to be no millionaire =O

  • Mal eine Spezialfrage, wofür ich auf die Schnelle keine Ergebnisse in Google finde:


    Ich möchte gerne eine Zahl näher bzw. direkt an den Wert 0 bringen; die Zahl kann ursprünglich sowohl positiv als auch negativ gewesen sein. Allerdings darf eine positive Zahl nicht negativ werden, und eine negative nicht positiv.


    Dabei suche ich nach einer möglichst "eleganten" Lösung. Irgendwas sagt mir, dass es sie gibt, mir fällt jedoch keine mehr ein^^:


    Die Holzhammermethode dazu wäre ja z.B.


    Eine mMn. deutlich elegantere Lösung, die mir noch einfiele, wäre die Nutzung von min und max:

    Code
    import random
    zahl = random.randint(-5,5)
    verr = 3
    if zahl > 0:
    zahl = max(0, zahl-verr)
    elif zahl < 0:
    zahl = min(0, zahl+verr)

    Ich werde allerdings das Gefühl nicht los, dass es eine NOCH einfachere und elegantere Lösung dieses Problems gibt, ich komme aber nicht drauf. Fällt jemandem womöglich eine elegantere und kürzere Lösung ein, oder lasse ich mich von genanntem Gefühl täuschen? Oder gibt es dafür einen Fachbegriff, den ich ergoogeln kann? Vielen Dank schonmal im Voraus für jeden Vorschlag und jede Hilfe^^.

  • Einfach mal zB 0.7 nehmen tut's nicht? Wenn es immer um einen konstanten Betrag sein muss, dann


    Code
    x = 100
    DIFF = 3
    new_x = x * ((abs(x) - DIFF) / abs(x))
    print(x, new_x)

    Kein Support per PN! Von Hilfestellung sollen alle profitieren!

  • Einfach Multiplizieren geht leider nicht. Es ist genau so gewollt, dass immer ein bestimmter Wert abgezogen wird, aber nie über 0 hinausgeht (egal von welcher Seite).


    Vielen Dank, genau dieses Beispiel brauchte ich! Ich hatte bisher noch garnichts mit ABS zu tun u. brauch da ein wenig Übung^^.


    Danke! :)

  • Ah, die Bedingung mit dem bis 0 habe ich ueberlesen. Dann wuerde ich das denke ich so machen:


    Ist also in der Summe nicht so weit weg von deinem Original. Eine Fallunterscheidung kann man sich dann leider nicht sparen.

    Kein Support per PN! Von Hilfestellung sollen alle profitieren!