Skript hochgeladen
This commit is contained in:
76
normalize_username_bycs_gosa.py
Normal file
76
normalize_username_bycs_gosa.py
Normal file
@@ -0,0 +1,76 @@
|
||||
import csv
|
||||
|
||||
def normalize_username(username):
|
||||
"""
|
||||
Ersetzt Umlaute und Sonderzeichen in einem Benutzernamen durch ihre ASCII-Entsprechungen.
|
||||
|
||||
Args:
|
||||
username (str): Der zu normalisierende Benutzername.
|
||||
|
||||
Returns:
|
||||
str: Der normalisierte Benutzername.
|
||||
"""
|
||||
mapping = {
|
||||
'ä': 'ae', 'ö': 'oe', 'ü': 'ue', 'ß': 'ss',
|
||||
'č': 'c', 'ũ': 'u', 'š': 's', 'ž': 'z', 'đ': 'd', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ś': 's', 'ź': 'z',
|
||||
'ş': 's', 'ğ': 'g', 'é': 'e', 'ě': 'e'
|
||||
}
|
||||
normalized_username = ''
|
||||
for char in username:
|
||||
normalized_username += mapping.get(char, char) # Ersetze, falls vorhanden, sonst belasse Zeichen unverändert
|
||||
return normalized_username
|
||||
|
||||
def process_csv(input_file, output_file, log_file):
|
||||
"""
|
||||
Liest eine CSV-Datei, normalisiert die Benutzernamen in der "Kennung"-Spalte,
|
||||
erkennt Duplikate, hängt bei Bedarf eine Zahl an die Kennung an
|
||||
und protokolliert alle Änderungen in einer Log-Datei.
|
||||
Schreibt die Ergebnisse in eine neue CSV-Datei.
|
||||
|
||||
Args:
|
||||
input_file (str): Der Pfad zur Eingabe-CSV-Datei.
|
||||
output_file (str): Der Pfad zur Ausgabe-CSV-Datei.
|
||||
log_file (str): Der Pfad zur Log-Datei.
|
||||
"""
|
||||
seen_usernames = {} # Dictionary, um bereits verwendete Benutzernamen zu verfolgen
|
||||
with open(input_file, 'r', newline='', encoding='utf-8') as infile, \
|
||||
open(output_file, 'w', newline='', encoding='utf-8') as outfile, \
|
||||
open(log_file, 'w', newline='', encoding='utf-8') as logfile:
|
||||
|
||||
reader = csv.reader(infile, delimiter=';')
|
||||
writer = csv.writer(outfile, delimiter=';')
|
||||
log_writer = csv.writer(logfile, delimiter=';')
|
||||
|
||||
header = next(reader) # Lese die Kopfzeile
|
||||
writer.writerow(header) # Schreibe die Kopfzeile in die Ausgabedatei
|
||||
log_writer.writerow(['Original Kennung', 'Normalisierte Kennung']) # Schreibe Header in die Log-Datei
|
||||
|
||||
for row in reader:
|
||||
try:
|
||||
kennung = row[1] # Die "Kennung"-Spalte (Index 1)
|
||||
normalized_kennung = normalize_username(kennung)
|
||||
|
||||
# Behandle Duplikate
|
||||
original_kennung = kennung
|
||||
count = seen_usernames.get(kennung, 0)
|
||||
if count > 0:
|
||||
normalized_kennung += str(count + 1)
|
||||
log_writer.writerow([original_kennung, normalized_kennung]) # Protokolliere die Änderung
|
||||
|
||||
seen_usernames[kennung] = count + 1
|
||||
row[1] = normalized_kennung # Ersetze die ursprüngliche Kennung durch die normalisierte
|
||||
writer.writerow(row)
|
||||
except IndexError:
|
||||
print(f"Zeile übersprungen wegen Indexfehler: {row}") # Behandelt Zeilen mit zu wenigen Spalten
|
||||
except Exception as e:
|
||||
print(f"Fehler beim Verarbeiten der Zeile {row}: {e}") # Fängt andere Fehler ab
|
||||
|
||||
# Beispielaufruf der Funktion
|
||||
input_csv_file = '2026-02-16_BYCSexport_for_gosa.csv' # Ersetze dies durch den tatsächlichen Pfad zu deiner Eingabedatei
|
||||
output_csv_file = '2026_02_16_gosa.csv' # Ersetze dies durch den gewünschten Pfad für die Ausgabedatei
|
||||
log_file = 'kennung_aenderungen.csv' # Pfad zur Log-Datei
|
||||
|
||||
process_csv(input_csv_file, output_csv_file, log_file)
|
||||
print(f"Die CSV-Datei '{input_csv_file}' wurde verarbeitet. Die normalisierten Daten wurden in '{output_csv_file}' gespeichert.")
|
||||
print(f"Alle Änderungen an den Kennungen wurden in '{log_file}' protokolliert.")
|
||||
|
||||
Reference in New Issue
Block a user