testlauf mit ggs daten

This commit is contained in:
Patrick vom Hagen
2024-01-08 12:45:58 +01:00
parent 4e5f00a0e4
commit 4b9417ade4
23 changed files with 7906 additions and 9 deletions

63
src/compare.py Normal file
View File

@@ -0,0 +1,63 @@
import csv
from Levenshtein import distance
# TODO Filter für Spalten, ggfs. Klasse benötigt
# TODO Filter für Dublikate hier wird dann die Klasse benötigt
def read_csv(file_path):
data = []
with open(file_path, newline='', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile, delimiter=';')
for row in reader:
data.append((row[0].strip(), row[1].strip()))
return data
def similar_sets(pair, data):
similar_pairs = []
for item in data:
if distance(pair[0], item[0]) <= 1 and distance(pair[1], item[1]) <= 1:
similar_pairs.append(item)
return similar_pairs
def compare_csv(file1, file2):
data1 = read_csv(file1)
data2 = read_csv(file2)
common_pairs = set(data1) & set(data2)
unique_pairs1 = set(data1) - common_pairs
unique_pairs2 = set(data2) - common_pairs
return common_pairs, unique_pairs1, unique_pairs2, data1, data2
def find_similar_pairs(pair, other_data):
similar_pairs = []
for item in other_data:
if distance(pair[0], item[0]) <= 2 and distance(pair[1], item[1]) <= 2:
similar_pairs.append(item)
return similar_pairs
def main():
file1_path = '../GGS/ggsSnew.csv' # Pfad zur ersten CSV-Datei
file2_path = '../GGS/ggsSold2.cvs' # Pfad zur zweiten CSV-Datei
common_pairs, unique_pairs1, unique_pairs2, data1, data2 = compare_csv(file1_path, file2_path)
print(f"Anzahl der übereinstimmenden Paare: {len(common_pairs)}")
print(f"Anzahl der neuen Einträge: {len(unique_pairs1)}")
print(f"Anzahl der veralteten Einträge: {len(unique_pairs2)}")
for pair in data1:
similar_pairs_list2 = find_similar_pairs(pair, set(data2) - {pair})
if similar_pairs_list2:
print(f"Ähnliche Paare zu {pair} in Liste 2: {similar_pairs_list2}")
if __name__ == "__main__":
main()

View File

@@ -1,5 +1,6 @@
import pandas as pd
import chardet
import csv
def check_file(path):
@@ -38,3 +39,32 @@ def format_csv(path, type):
except pd.errors.ParserError as e:
# Wenn ein Parserfehler auftritt, gibt eine Fehlermeldung aus
print(f"Fehler beim Einlesen der CSV-Datei: {e}")
def clean_data(path, clean):
try:
# Lese den Header der CSV-Datei
with open(path, 'r', newline='', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile, delimiter=';')
header = next(reader)
# Finde die Indizes der Spalten 'Name' und 'Vorname' und 'Klasse'
name_index = header.index('name')
vorname_index = header.index('vorname')
klasse_index = header.index('klasse')
# Öffne die CSV-Datei im Schreibmodus und schreibe nur die gewünschten Spalten zurück
with open(clean, 'w', newline='', encoding='utf-8') as csvfile2:
writer = csv.writer(csvfile2, delimiter=';')
# Schreibe den neuen Header mit 'Name' und 'Vorname'
writer.writerow(['name', 'vorname', 'klasse'])
print(name_index, vorname_index, klasse_index)
for row in reader:
writer.writerow([row[name_index], row[vorname_index], row[klasse_index]])
print(f'Nur die Spalten "Name" und "Vorname" in der CSV-Datei {path} wurden beibehalten.')
except FileNotFoundError:
print(f'Die Datei {path} wurde nicht gefunden.')
except ValueError:
print(f'Die Spalten "Name" und "Vorname" wurden nicht gefunden.')

38
src/output.py Normal file
View File

@@ -0,0 +1,38 @@
import csv
# Zielformat: ${nachname};${vorname};HL070${SCHOOL}-${klasse};${recordID};1024;${ox_quota};${ox_context}
def create_output(path):
schule = input('Schule: ')
record_id = input('Record ID: ')
mail_quota = input('Mail')
ox_quota = input('OX Quota: ')
ox_context = input('OX Context: ')
data = []
with open(path, newline='', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile, delimiter=';')
for row in reader:
data.append((row[0].strip(), row[1].strip(), schule, record_id, mail_quota, ox_quota, ox_context))
csv_file_path = '../Data/output.csv'
with open(csv_file_path, 'w', newline='', encoding='utf-8') as csvfile:
csv_writer = csv.writer(csvfile, delimiter=';')
# Schreibe die Header-Zeile (optional)
# name;vorname;klasse;schuelerid;mailUserQuota;oxUserQuota;oxContext
csv_writer.writerow(['name', 'vorname', 'klasse', 'schuelerid', 'mailUserQuota', 'oxUserQuota', 'oxContext'])
# TODO UUID prüfen bzw generien
# Schreibe die Daten aus dem Array in die CSV-Datei
csv_writer.writerows(data)
print(f"CSV-Datei wurde erfolgreich erstellt: {csv_file_path}")
if __name__ == "__main__":
create_output('../Data/test_new.csv')
# TODO Leerzeilen löschen
# TODO Klassenname umformatieren - HL070**** Nummer einfügen