import re # Regular Expressions import datetime # Datum/Zeit # Erklärungen zu diesem Code gibt es auch als Video hier: # https://web.microsoftstream.com/video/01abb9d3-d4ae-4fbd-9dfd-86313dba7610 # und für Datensparsame und solche ohne BLDSG-Account auch hier: # https://fginfo.ksbg.ch/~ivo/videos/informatik/vierte-klasse/daten-extraktion-youtube-watchtime-aggregation.mp4 # Daten einlesen # Entweder vollständiger Pfad zur Datei oder (wie z.B. C:\Users\Hansli\Desktop\watch-history.html) oder # nur Dateiname, wenn die Datei im gleichen Verzeichnis wie das Pythonprogramm liegt. f = open("jan14-history.html", "r") html = f.read() # Alles einlesen f.close() # Datei schliessen # Datum der Form 09.02.2012, 14:15:59 MEZ daten = re.findall(r"(\d{2})\.(\d{2})\.(\d{4}), (\d{2}):(\d{2}):(\d{2}) MEZ", html) #Erste 3 Einträge zur Kontrolle ausgeben print(daten[0:3]) # Resultat, das am Schluss geschrieben werden soll csv = "" # Comma separated values anzahl = [0 for i in range(24)] # Wie viele Kontrollausgaben? debug = 10 # Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag for d in daten: # Einträge in Zahlen umwandeln # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt # Die Zeichenkette "42" ist nicht das gleiche wie die Zahl 42. e = [int(x) for x in d] if debug>0: # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren print(e) # [1, 6, 2021, 21, 23, 12] debug -= 1 # Um 1 vermindern # Datum daraus generieren (macht die Datumsmanipulation einfacher). # Jahr, Monat, Tag, Stunde, Minute, Sekunde datum = datetime.datetime(e[2], e[1], e[0], e[3], e[4], e[5]) if debug>0: # Ausgabe zur Kontrolle, produziert folgendes Format print(datum) # 2021-01-06 21:23:12 debug -= 1 # Um 1 vermindern # Wochentag (Mo=0, Di=1, ..., So=6) # Sämtliche Methoden für datetime-Objekte sind hier beschrieben: https://docs.python.org/3/library/datetime.html#datetime-objects hour = datum.hour anzahl[hour] += 1 # Anzahl für diesen Wochentag um 1 erhöhen. # Formatierte Ausgabe des Datums, siehe https://www.w3schools.com/python/python_datetime.asp # \n heisst neue Zeile. # csv += datum.strftime("%Y-%m-%d %H:%M:%S\n") #Das Format soll so angepasst werden, damit die Tabellenkalkulation dann damit umgehen kann. csv = "" for i in range(24): csv += str(i)+"," csv += "\n" for a in anzahl: csv += str(a)+"," csv+="\n" # Kontrolle print(csv) # Ausgabe in Datei schreiben f = open("resultat.csv", "w") f.write(csv) f.close()