elterndienstplaner/test/pseudo/convert_ausgabe.py
Jan Hoheisel f0282a9aa9 pseudonymisierste Daten importiert
doppelter Code aus berechne_faire_zielverteilung eliminiert
Max 10 Sekunden Rechenzeit
2025-12-22 21:31:25 +01:00

84 lines
2.8 KiB
Python

#!/usr/bin/env python3
# Konvertiert den "Dienstplan Clean" aus Excel in das ausgabe.csv-Format
import csv
from datetime import datetime
import calendar
def parse_date(date_str):
"""Konvertiert 'Monday, August 11, 2025' zu '2025-08-11'"""
try:
# Parse das englische Datumsformat
date_obj = datetime.strptime(date_str, "%A, %B %d, %Y")
return date_obj.strftime("%Y-%m-%d")
except:
return None
def get_weekday_german(date_str):
"""Gibt den deutschen Wochentag zurück"""
try:
date_obj = datetime.strptime(date_str, "%A, %B %d, %Y")
weekdays = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag']
return weekdays[date_obj.weekday()]
except:
return ""
# Konvertierung
with open('imp-ausgabe.csv', 'r', encoding='utf-8') as infile:
reader = csv.reader(infile)
header = next(reader)
# Mapping der Spalten (imp-ausgabe -> ausgabe)
# imp: ,Frühstück,Kochen,Elternabend 1,Elternabend 2,Notdienst Essensausgabe,Putznotdienst
# ziel: Datum,Wochentag,Frühstücksdienst,Putznotdienst,Essensausgabenotdienst,Kochen,Elternabend
data = []
for row in reader:
if len(row) < 6:
continue
date_str = row[0].strip('"')
if not date_str or date_str.startswith('Saturday') or date_str.startswith('Sunday'):
continue # Wochenenden überspringen
iso_date = parse_date(date_str)
if not iso_date:
continue
weekday = get_weekday_german(date_str)
# Dienste extrahieren
fruehstueck = row[1].strip() if len(row) > 1 else ''
kochen = row[2].strip() if len(row) > 2 else ''
elternabend1 = row[3].strip() if len(row) > 3 else ''
elternabend2 = row[4].strip() if len(row) > 4 else ''
essensausgabe = row[5].strip() if len(row) > 5 else ''
putz = row[6].strip() if len(row) > 6 else ''
# Elternabend kombinieren
elternabend_kombiniert = ''
if elternabend1 and elternabend2:
elternabend_kombiniert = f"{elternabend1} {elternabend2}"
elif elternabend1:
elternabend_kombiniert = elternabend1
elif elternabend2:
elternabend_kombiniert = elternabend2
data.append([iso_date, weekday, fruehstueck, putz, essensausgabe, kochen, elternabend_kombiniert])
# Sortieren nach Datum
data.sort(key=lambda x: x[0])
# Schreibe neue ausgabe.csv
with open('ausgabe.csv', 'w', newline='', encoding='utf-8') as outfile:
writer = csv.writer(outfile)
# Header schreiben
writer.writerow(['Datum', 'Wochentag', 'Frühstücksdienst', 'Putznotdienst', 'Essensausgabenotdienst', 'Kochen', 'Elternabend'])
# Daten schreiben
for row in data:
writer.writerow(row)
print("Konvertierung abgeschlossen! ausgabe.csv wurde erstellt.")