You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
3.0 KiB
Python

import csv
import os
JAHRE = ["2017", "2018", "2019"]
PFAD = "Daten"
ENDUNG = ".csv"
class AusgabeManager:
def __init__(self):
self.ausgabe = ""
def inhalt_hinzufuegen(self, inhalt):
self.ausgabe = f"{self.ausgabe}\n{inhalt}"
def inhalt_anzeigen(self):
print(self.ausgabe)
def inhalt_schreiben(self, datei):
with open(datei, "w", encoding='utf-8') as file:
file.write(self.ausgabe)
def csv_auslesen(pfad):
daten = []
with open(pfad, encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile, delimiter=";")
for data in reader:
if data["Prüflingsnummer"]:
daten.append((data["Standortname"], data["Prüflingsnummer"], data["Bestanden"]))
return daten
def anzahl_geraete_bestimmen(daten, jahr, ausgabe):
"""Zählt die Anzahl der Geräte, wurden Geräte mehrfach gemessen, da Sie anfangs durchgefallen und somit
repariert werden mussten, wird das Gerät trotzdem nur einfach gezählt"""
geraete = []
for data in daten:
if not data[1] in geraete:
geraete.append(data[1])
ausgabe.inhalt_hinzufuegen(f"Vorhandene Geräte in {jahr}: {len(geraete)}")
def anzahl_durchgefuehrte_pruefungen_ermitteln(daten, jahr, ausgabe):
"""Zählt die Anzahl der durchgeführten Geräte, wurden Geräte mehrfach gemessen, da Sie anfangs durchgefallen und
somit repariert werden mussten, so wird dies als 2 Prüfungen gewertet. Einzelprüfschritte werden dennoch
zusammengefasst und als eine Prüfung gewertet"""
pruefungen = []
for data in daten:
pruefung = (data[1], data[2])
if pruefung not in pruefungen:
pruefungen.append(pruefung)
ausgabe.inhalt_hinzufuegen(f"Durchgeführte Prüfungen in {jahr}: {len(pruefungen)}")
def fehlerquote_bestimmen(daten, jahr, ausgabe):
"""Auswertung der Fehlerquote. Prüfungen nachdem das Gerät repariert worden ist werden nicht gewertet, da dies die
Fehlerquote verbessern würde"""
geraete = {}
for data in daten:
if not data[1] in geraete:
if data[2] == "ja":
geraete[data[1]] = True
elif data[2] == "nein":
geraete[data[1]] = False
else:
if data[2] == "nein":
geraete[data[1]] = False
gesamt = len(geraete)
fehler = 0
for status in geraete.values():
if not status:
fehler += 1
ausgabe.inhalt_hinzufuegen(f"Fehlerquote in {jahr}: {round(fehler / gesamt * 100, 2)}%")
def main():
ausgabe = AusgabeManager()
for jahr in JAHRE:
pfad = os.path.join(PFAD, f"{jahr}{ENDUNG}")
daten = csv_auslesen(pfad)
anzahl_geraete_bestimmen(daten, jahr, ausgabe)
anzahl_durchgefuehrte_pruefungen_ermitteln(daten, jahr, ausgabe)
fehlerquote_bestimmen(daten, jahr, ausgabe)
ausgabe.inhalt_hinzufuegen("\n")
ausgabe.inhalt_anzeigen()
ausgabe.inhalt_schreiben(os.path.join(PFAD, "ausgabe.txt"))
if __name__ == "__main__":
main()