@Stempelente: Numpy wird importiert aber gar nicht verwendet.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
Für Operationen auf Pfadnamen gibt es das `pathlib`-Modul, da sollte man keine Zeichenkettenoperationen verwenden.
Auf ``df["Berufsgruppen"]`` wird zu oft zugegriffen statt schon ermittelte und an Namen gebundene Werte einfach zu verwenden.
Sowohl ``type(df["Berufsgruppe"].unique())`` als auch ``int(BG)`` machen so ohne alles als Anweisungen keinen Sinn, weil die keinerlei Wirkung haben, ausser ein bisschen Rechenzeit zu verbrauchen.
`u` ist ein ungewöhnlicher Name für einen Laufindex. Was soll der denn bedeuten? Zudem ist es unypthonisch damit dann auf die Elemente einer Sequenz zuzugreifen. Man kann direkt über die Elemente iterieren, ohne den Umweg über einen Index. Fall man *zusätzlich* eine laufende ganze Zahl benötigt, gibt es die `enumerate()`-Funktion. Da kann man dann auch bei anderen Werten als 0 anfangen, und muss für Indexzugriffe nicht auch nicht Anpassungen vornehmen.
Dem Code nach ist die Kodierung der Datei also tatsächlich kaputt. Wo auch immer die Datei her kommt, das sollte man dort vielleicht mal lösen statt hier absichtlich "grün" durch "grün" zu ersetzen. Das ist pervers!
Und wenn man das hier absichtlich falsch macht, dann sollte man das auch *richtig* falsch machen, und nicht nur einen Wert ersetzen, sondern konsequent alles gleichartig falsch kodieren.
`quit()` gibt es eigentlich gar nicht. Das ist für die interaktive Python-Shell.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
from pathlib import Path
import pandas as pd
def pervers_falsch_kodieren(text):
return text.encode("utf-8").decode("iso-8859-1")
def main():
pfad = Path(input("Bitte den Pfad, mit Dateinamen angeben: "))
df = pd.read_csv(
pfad,
sep=",",
usecols=[1, 7, 12],
names=["MAC", "Berufsgruppe", "Stationsname"],
encoding="utf-8-sig",
)
df.insert(loc=1, column="QRCode", value="")
jobgruppen = df["Berufsgruppe"].unique()
auswahl = input(
f"Es wurden {len(jobgruppen)} Farben erkannt, ({jobgruppen})\n"
f"Korrekt?\n"
f" j=Jo, n=Nö\n"
)
if auswahl == "j":
for farbe in jobgruppen:
job = input(
f"Zur Farbe: {farbe}, soll welche Berufsgruppe zugewiesen werden: "
)
df = df.replace([farbe], [pervers_falsch_kodieren(job)])
elif auswahl == "n":
for i in range(1, len(jobgruppen) + 1):
farbe = input(f"Farbe für {i}. Berufsgruppe: ")
job = input(f"Name für {i}. Berufsgruppe: ")
df = df.replace(
[pervers_falsch_kodieren(farbe)],
[pervers_falsch_kodieren(job)],
)
else:
print("Keine richtige Auswahl getroffen")
return
df.to_csv(
pfad.with_name(pfad.stem + "fertig.csv"),
index=False,
encoding="utf-8-sig",
)
if __name__ == "__main__":
main()