ConfigParser - Werte verrechnen

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
MBler_auf_exkursion
User
Beiträge: 4
Registriert: Sonntag 4. August 2019, 22:36

Guten Abend zusammen,


muss als Projekt in meinem Studium (Maschbau) ein kleines Programm schreiben. Durch die Verwendung des Configparser habe ich bisher einen Code geschrieben welcher, die aktuelle Uhrzeiten nach dem Prinzip einer Stempeluhr in eine .ini Datei abspeichert. Das Aus-/Einstempeln und schreiben der INI sowie das ausgeben in der Konsole funktionieren einwandfrei. Als nächstes würde ich gerne die in den einzelnen Sections der INI geschriebenen Stempelzeiten erneut auslesen und diesmal zusätzlich verrechnen. Es soll also die Differenz zwischen Ein- und Ausstempelzeit errechnet werden. Habe da bisher auch noch nichts im Internet gefunden. Hoffe hier finde Ich Hilfe.

Mit freundlichen Grüßen

Tim
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Code: Alles auswählen

differenz = ausstempelzeit - einstempelzeit
Wenn die Objekte Datetime-Instanzen sind, ist das alles, was Du brauchst.

Beim Speichern von Zeiten würde ich spontan an Datenbanken, CSV-Dateien, JSON denken, nicht gerade an INI. Was willst Du eigentlich erreichen? Was hast Du schon? Zeige den Code, an dem Du nicht weiter kommst, damit wir einschätzen können, was Dir fehlt, sonst ist es echt schwierig zu helfen.
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sind die INI-Files eine Vorgabe? Oder hast du dir das ausgesucht? Denn Format-bedingt sind die eher nicht geeignet zur Darstellung von Zeitreihen. Da würde man eher CSV für nehmen. Oder gleich das in Python schon eingebaute sqlite. Wenn du darfst, solltest du das also ändern. Denn das macht dein hier präsentiertes Problem deutlich einfacher.

Und in jedem Fall musst du uns zeigen, was GENAU du tust, denn nur so kann man Tipps geben, wie du vorgehen kannst. Denn allgemein ist eine Differenz ja nun lediglich a-b. Ohne das drum rum kann man da mehr nicht sagen.
MBler_auf_exkursion
User
Beiträge: 4
Registriert: Sonntag 4. August 2019, 22:36

Sirius3 hat geschrieben: Montag 5. August 2019, 08:47

Code: Alles auswählen

differenz = ausstempelzeit - einstempelzeit
Wenn die Objekte Datetime-Instanzen sind, ist das alles, was Du brauchst.
Genau da liegt das Problem. Habe es bisher nicht hinbekommen die Objekte als DateTime-Instanz auszugeben. Ich benutze zwar das DateTime-Modul um die Einstempelzeiten in der Config zu speicher jedoch werden mir diese nach dem ausgeben nicht als DateTime-Instanz sondern als String ausgegeben.


Zum Auslesen und printen der jeweiligen Sektion, bestimmt durch den Input, bin ich bisher folgendermaßen vorgegangen:
e = input ("Datum: ")
config.read("Stempelzeiten_test.ini")
if config.has_section(b+" , "+e):
for key in config [b+" , "+e]:
print (key)
print (config[b+" , "+e][key])

in der Konsole wird das dann folgendermaßen geprinted:
Datum: 05.08.2019
eingestempelt
07:24
ausgestempelt
16:14

Wie gesagt mit dem Format mit dem es geprintet wird bin ich vollkommen zufrieden jedoch fehlt die formatierung fürs rechnen. Glaube ich zumindest :D


Leider ist die Abgabefrist schon am Donnerstag und um jetzt nochmal für den letzten Feinschliff von ConfigParser auf CSV umzusteigen wäre das doch zu viel Aufwand oder?

Vielen dank für eure schnelle Antwort

Tim
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kannst du mal bitte zeigen, wie da die INI-Datei aussieht?

Und nein, die Umstellung ist nicht zu spät. Den das Schreiben ist trivial im Verhältnis zum auswerten, und wenn du bei letzterem hakst, ist es angezeigt, das auswerten zum Maßstab zu machen.
MBler_auf_exkursion
User
Beiträge: 4
Registriert: Sonntag 4. August 2019, 22:36

__deets__ hat geschrieben: Montag 5. August 2019, 18:46 Kannst du mal bitte zeigen, wie da die INI-Datei aussieht?
Die INI wird folgendermaßen geschrieben: ("timk" steht für den Benutzer für welchen die Stempelzeiten eingetragen wurden.)

[timk , 03.08.2019]
eingestempelt = 07:18
ausgestempelt = 16:21

[timk , 05.08.2019]
eingestempelt = 07:24
ausgestempelt = 16:14



Tim
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist wirklich komplett falsch. Tut mir leid. Aber ist leider so. Das Config file Format ist dazu gemacht, mit festen Sektionen zu arbeiten. Nicht wie du in genau denen Daten abzulegen. Du benutzt hier gerade nen Hammer, um eine M3 Schraube in ein Maschinengewinde zu ballern.

Schreib eine CSV Datei. Mit 3 Spalten. Zeitpunkt. Vorgang. Name. Alternativ SQLite mit einer Tabelle mit den 3 Spalten.

Das war’s. Garantiert weniger Code als du jetzt hast. Und leichter zu verarbeiten.
MBler_auf_exkursion
User
Beiträge: 4
Registriert: Sonntag 4. August 2019, 22:36

Okay dann werd ichs mal mit ner CSV probieren. Danke für die Tipps und den Vergleich mit der M3 Schraube :lol: :lol: das hat mir die ganze Sache viel Verständlicher gemacht.


Tim
Antworten