lehrkraefte:ks:teaching:informatik-glf26

This is an old revision of the document!


==== KW 8 ==== #Movie 21:24

Für Daten im Format März 27, 2023 9:34 pm

Für Daten im Format März 27, 2023 9:34 pm

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()

Für Daten im Format Jun 27, 2023 9:34 pm

Für Daten im Format Jun 27, 2023 9:34 pm

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()

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 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. 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?

Click to display ⇲

Click to hide ⇱

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")
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.1770894098.txt.gz
  • Last modified: 2026/02/12 11:01
  • by Simon Knaus