ich arbeite derzeit privat an einem Projekt welches mir die freien Räume an meiner Hochschule anzeigen soll.
Bis vor kurzem war das nämlich gar nicht möglich, mittlerweile, seitdem ich das angefangen habe geht es zwar aber dennoch ist meins etwas besser.
Auch wenn das ganze relativ komplex aussieht bin ich wirklich Python-Anfänger aber nicht komplett unerfahren im Programmieren allgemein, ich hoffe ihr könnt mir bei dem ganzen unter die Arme greifen. Das ganze ist keine(!) Hausaufgabe oder sonst was, ich mache das aus freien Stücken weil mich das genervt hatte wie es bisher war ^^.
Jedenfalls lade ich mir alle ics-Kalenderdateien herunter und bereite diese als JSON Dateien auf. Die brauche ich nämlich damit mein Web-Frontend damit arbeiten kann. Bisher habe ich die Dateien so strukturiert, dass sie diesem Schema folgen: Woche_Raum.json was dann so aussieht:
15_01.01.11.json oder 15_01.01.16.json. Jetzt habe ich aber feststellen müssen, dass das so in meinem Frontend nicht funktioniert und ich eher 15.json brauche. Das bedeutet das jede dieser Dateien nun alle Räume enthält. Aussehen müsste das dann so: https://github.com/TonySpegel/free-room ... er/14.json
Also genauso wie vorher nur dass jetzt als übergeordneter Schlüssel noch der Raum hinzukommt und alle Räume zur Woche zusammengefasst sind.
Das ganze Projekt befindet sich hier: https://github.com/TonySpegel/free-rooms-py
Bisher ist der Ablauf grob dieser:
- 1. Website mit BS4 parsen und ICS-Dateien herunterladen (Kalendardateien)
2. Inhalte parsen und nur die Schlüssel speichern die mich interessieren (Beginn, Ende, Beschreibung)
3. Nach Zeiten aufsteigend sortieren
4. PRO Datei diese in JSON konvertieren
Ich hatte mir jetzt zwei Ansätze überlegt wie man das lösen könnte:
- 1. Aus den erzeugten Dateien hier: https://github.com/TonySpegel/free-room ... aster/json die Dateien zu mergen aber selbst dann fehlt mir wieder der übergeordnete Raum als Schlüssel.
Ein Ansatz den ich hierbei hatte war:Wobei ich hier wie gesagt nicht weiß wie ich einen weiteren Schlüssel hinzufüge und wie ich mit dem Code weiter mache (das ist ja nur das Mapping dann?)Code: Alles auswählen
def merge_files(): files = [f for f in os.listdir('./json/') if os.path.isfile(os.path.join('./json/', f))] print(files) groups = defaultdict(list) for file_name in files: week, room = file_name.split('_') groups[week].append(file_name) return groups
Folgender Punkt scheint mir der "richtigere" Weg:
2. Direkt eine Schlüsselebene hinzufügen aber nicht nach jeder Datei direkt diese verarbeiten
Und das ist der Punkt an dem ich nicht weiß wie ich vorgehen soll:
In meiner Funktion build_json_object habe ich jetzt bspw:ergänzt und EIGENTLICH brauche ich doch nur ein weiteres append und packe alles da rein? Weiß aber leider nicht wie das an der Stelle geht.Code: Alles auswählen
room_top_level_key = '{}.{}.{}'.format(building_number, floor_number, room_number)
MfG