Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ===== Progamm ===== ==== KW 8 ==== <!-- Movie 21:24--> <hidden Für Daten im Format März 27, 2023 9:34 pm> <code python insta_analyse_deutsch.py> # -*- coding: utf-8 -*- import re # Regular Expressions import datetime # Datum/Zeit import os # Files suchen # Erklärungen zu diesem Code sind bei der Lehrperson erhältlich. Es ist nicht nötig, diesen Code zu verstehen, um die Aufgabe zu lösen. Es könnte aber interessant sein, sich damit zu beschäftigen. rootdir = 'C:/ordner/wo/alles/liegt/' pathtocsv = 'C:/order/wo/das/resultat/sein/soll/dateiname.csv' mnum = { "Januar": 1, "Februar": 2, "März": 3, "April": 4, "Mai": 5, "Juni": 6, "Juli": 7, "August": 8, "September": 9, "Oktober": 10, "November": 11, "Dezember": 12 } # Resultat, das am Schluss geschrieben werden soll csv = "" # Comma separated values # Wie viele Kontrollausgaben? debug = 10 # Alle HTML-Dateien im Verzeichnis anzeigen for root, dirs, files in os.walk(rootdir): for file in files: if file.endswith(".html"): filepath = os.path.join(root, file) # Datei oeffnen f = open(filepath, "r", encoding="utf8") html = f.read() # Alles einlesen f.close() # Datei schliessen # Datum der Form Apr. 08, 2021 8:54 am einlesen # Alle nötigen Angaben werden in Klammern "ge-captured" daten = re.findall( "([A-Z][a-zä]+) (\d{1,2}), (\d{4}) (\d{1,2}):(\d{1,2}) ([ap]m)", html) if (debug > 0): print(file, ": ", len(daten)) debug -= 1 # 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 = [mnum[d[0]]] + [int(x) for x in d[1:-1]] # Nachmittag? Plus 12 Stunden (Ausser Mitternacht = 0) if d[5] == "pm": e[3] = (e[3]+12) % 24 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[0], e[1], e[3], e[4], 0) 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 wday = datum.weekday() # Formatierte Ausgabe des Datums, siehe https://www.w3schools.com/python/python_datetime.asp # \n heisst neue Zeile. # Das Format soll so angepasst werden, damit die Tabellenkalkulation dann damit umgehen kann. csv += datum.strftime("%Y-%m-%d %H:%M:%S;" + os.path.splitext(file)[0]+"\n") # Ausgabe in Datei schreiben f = open(pathtocsv, "w") f.write(csv) f.close() </code> </hidden> <hidden Für Daten im Format Jun 27, 2023 9:34 pm> <code python insta_analyse_english.py> import re # Regular Expressions import datetime # Datum/Zeit import os # Files suchen # Erklärungen zu diesem Code sind bei der Lehrperson erhältlich. Es ist nicht nötig, diesen Code zu verstehen, um die Aufgabe zu lösen. Es könnte aber interessant sein, sich damit zu beschäftigen. rootdir = 'C:/ordner/wo/alles/liegt/' pathtocsv = 'C:/order/wo/das/resultat/sein/soll/dateiname.csv' mnum = {"Jan": 1, "Feb": 2, "Mar": 3, "Apr": 4, "May": 5, "Jun": 6, "Jul": 7, "Aug": 8, "Sep": 9, "Oct": 10, "Nov": 11, "Dec": 12} # Resultat, das am Schluss geschrieben werden soll csv = "" # Comma separated values # Wie viele Kontrollausgaben? debug = 10 # Alle HTML-Dateien im Verzeichnis anzeigen for root, dirs, files in os.walk(rootdir): for file in files: if file.endswith(".html"): filepath = os.path.join(root, file) # Datei oeffnen f = open(filepath, "r", encoding="utf8") html = f.read() # Alles einlesen f.close() # Datei schliessen # Datum der Form Apr. 08, 2021 8:54 am einlesen # Alle nötigen Angaben werden in Klammern "ge-captured" daten = re.findall( "([A-Z][a-z][a-z])\.? (\d{1,2}), (\d{4}) (\d{1,2}):(\d{1,2}) ([ap]m)", html) if (debug > 0): print(file, ": ", len(daten)) debug -= 1 # 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 = [mnum[d[0]]] + [int(x) for x in d[1:-1]] # Nachmittag? Plus 12 Stunden (Ausser Mitternacht = 0) if d[5] == "pm": e[3] = (e[3]+12) % 24 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[0], e[1], e[3], e[4], 0) 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 wday = datum.weekday() # Formatierte Ausgabe des Datums, siehe https://www.w3schools.com/python/python_datetime.asp # \n heisst neue Zeile. # Das Format soll so angepasst werden, damit die Tabellenkalkulation dann damit umgehen kann. csv += datum.strftime("%Y-%m-%d %H:%M:%S;" + os.path.splitext(file)[0]+"\n") # Ausgabe in Datei schreiben f = open(pathtocsv, "w") f.write(csv) f.close() </code> </hidden> ==== KW 7==== === Ziele === * Instagram-Daten sind heruntergeladen und in einen Ordner extrahiert (entpackt). * Python-Testprogramm läuft bei allen. * Dokumentation ist angelegt. === Aufträge === * **Python-Check-Up:** * Das Programm unten auf den gewählten Ordner anpassen, laufen lassen und die Gesamtdateigrösse in Forms kopieren. * Dateigrösse in Bytes in Forms notieren (siehe unten). * **Instagramm-Daten:** * Jede/r lädt die Instagram-Daten (als HTML) herunter. * Ordner erstellen und ZIP-Datei darin entpacken. * Ein Datum (z.B. ''Apr 20, 2023 10:13 am'') aus den Instagram-Daten (z.B. aus den Likes) lesen und auf [[https://forms.cloud.microsoft/e/i5ATAh9inY|Forms]] posten (mit anderen Informationen oben) * **Datei-Endungen einblenden:** Oft ist es einfach, wenn man von Dateien die Erweiterung kennt. Blende diese ein, siehe z.B. [[https://www.heise.de/tipps-tricks/Windows-Dateiendungen-anzeigen-lassen-4000129.html|diese Anleitung]] * **Dokumentation**: Füge den Begriff CSV an: Lege dazu eine Datei in Excel an, speichere diese als CSV und betrachte sie nachher mit einem Texteditor, d.h., rechts klicken und öffnen. Editiere die Datei und öffne sie erneut in Excel. Erkläre in eigenen Worten was eine CSV-Datei ist. Geht das auch mit einer Datei, welche du als Excel-Datei (Erweiterung XLSX) speichert? <hidden> <code python insta_analyse.py> import os # --- Programm um alle Dateien zu durchlaufen--- # Pfad anpassen folder_to_check = 'C:/ordner/wo/alles/liegt/' #Achtung: Forward slashes oder ein r vor dem String def get_directory_size(start_path): total_size = 0 # os.walk() generates the file names in a directory tree # It yields a 3-tuple (dirpath, dirnames, filenames) for dirpath, dirnames, filenames in os.walk(start_path): for f in filenames: # Join the directory path and file name to get the full path fp = os.path.join(dirpath, f) print(fp) # Skip if it is a symbolic link (optional, but good practice) if not os.path.islink(fp): total_size += os.path.getsize(fp) return total_size print(f"Berechne Grösse für: {os.path.abspath(folder_to_check)}") size_in_bytes = get_directory_size(folder_to_check) # Convert to Megabytes for easier reading size_in_mb = size_in_bytes / (1024 * 1024) print(f"Gesamtgrösse: {size_in_bytes} bytes") print(f"Gesamtgrösse: {size_in_mb:.2f} MB") </code> </hidden> ==== Dokumentation ==== ^ Begriff ^ Eintrag ^ |CSV | Dokumentiere, was CSV, wie es angezeigt und bearbeitet werden kann. Erstelle eine CSV-Datei mit Notepad und betrachte sie in Excel.| lehrkraefte/ks/teaching/informatik-glf26.txt Last modified: 2026/02/12 11:01by Simon Knaus