Data Processing

Keine Batterie hält ewig - nun möchten wir wissen, wie lange unsere Batterie Strom liefert, und wieviel Energie wir praktisch nutzen konnten, bis sie leer ist. Aus der Physik wissen wir, dass $Spannung\cdot{}Strom$ die Leistung unserer Batterie (bzw. die Leistungsaufnahme der Leuchte) ergibt. Wenn wir die Leistung über die ganze Lebensdauer unseres Systems aufzeichnen, wissen wir, wieviel Arbeit die Batterie insgesamt geleistet hat.

TODO je nach verwendeter Sensortechnik unterscheidet sich dieser Block.
TODO: wollen wir wirklich Spannung & Strom messen, oder nur $U$, da $R$ bekannt ist?

Schreibe Python-Code wie folgt. Falls die nötigen Python-Kenntnisse noch nicht vorhanden sind, folgst du den untenstehenden Tutorials.

  • Datei batterie.csv im Schreibmodus öffnen.
  • Eine Schleife ausführen, die alle zehn Sekunden die Strom- und Spannungswerte ausliest.
  • Für jede Lesung wird eine Zeile (en. record) in die Datei geschrieben im folgenden Format:

    <timestamp>, <spannung>, <strom>

  • also zum Beispiel (für eine Messung von $U = 1.37V$ und $I = 300mA$):

    2024-06-13 14:08:37.375, 1.37, 0.3

Python: Datei Ein- und Ausgabe

Wie lesen wir Daten in einer Text-Datei?

# Opens a file for writing (and closes it again after the 'with').
with open('dateiname.csv', 'w') as outfile:
    for i in range(10):
        line = 'Zeile ' + str(i) + '\n'
        outfile.write(line)

Beachte:

  • Wenn Dateien gelesen oder geschrieben werden, müssen sie beim Betriebssystem reserviert werden. Mit with wird sichergestellt, dass die Datei nicht offen bleibt sondern nach dem Lesevorgang wieder geschlossen wird.
  • Die Datei (hier 'dateiname.csv') muss sich im gleichen Ordner befinden wie die Python-Datei.
  • 'w' bedeutet write, dass die Textdatei nur gelesen und nicht verändert wird.
  • str() verwandelt die Zahl in einen Text.
  • '\n' ist der ASCII-Code für einen Zeilenumbruch.
Aufgabe

Beschreibe eine Datei mit einigen Zeilen. Es ist ungünstig, mehr als einige zehntausend Zeilen zu schreiben…

Python: Schlafen

Wir wollen nur alle zehn Sekunden einen neuen Record schreiben, aber der Computer ist viel schneller. Zwischen den Messungen schlafen wir also:

import time
duration = 5
print(f'Hello, I will sleep for {duration} seconds!')
time.sleep(duration)
print('Yawn, just woke up!')

Python: Zeitstempel formatieren

Zeitstempel können aus der datetime Bibliothek geholt werden:

from datetime import datetime
 
print(datetime.now())

Mit Python f-Strings können mehrere Argumente praktisch in einen String gepackt werden:

from datetime import datetime
timestamp = datetime.now()
planet = 'Alderaan'
magnitude = 'great'
print(f'At {timestamp}, there was a {magnitude} disturbance in the Force on planet {planet}!')

(Du weisst nicht, was mit Alderaan hier gemeint ist? → Star Wars schauen bis zur nächsten Lektion!)

CSV-Format

Unsere Log-Datei ist im Comma-Separated-Values Format gespeichert: Die Daten sind ganz ähnlich gespeichert wie in einer Tabelle und können auch mit Excel und Sheets geöffnet werden. Jede Zeile entspricht einer Zeile der Tabelle; die Spalten sind meist mit Kommas voneinander getrennt. Manchmal werden aber auch Semikolons oder ein Tabulator (\t) als Trennzeichen verwendet.

Oft werden in der ersten Zeile die Namen der abgespeicherten Werte festgelegt:

Zeitstempel,Spannung,Strom
2024-06-13 14:08:37.375, 1.37, 0.301
2024-06-13 14:08:47.105, 1.35, 0.295
...
  • phtg/bp/ch3.1715626692.txt.gz
  • Zuletzt geändert: 2024-05-13 18:58
  • von hof