Python - € Zeichen aus CSV entfernen funktioniert nicht

Max-Berater

Erfahrenes Mitglied
Ich versuche gerade aus einer CSV das € Zeichen mittels Python zu entfernen. Sollte eigentlich keine große Sache sein, da ich es bereits mit anderen Zeichen, wie Komma und Semikolons gemacht habe. Nur beim € Zeichen verzweifle ich. Egal was ich versucht habe, es geht nicht und das € Zeichen wird nicht entfernt.




Python:
import os

def replace_commas_and_euro_with_semicolons(input_file, output_file):
    with open(input_file, 'r') as infile:
        content = infile.read()

    # Ersetze Kommas durch Punkte
    modified_content = content.replace(',', '.')

    # Ersetze Eurozeichen durch leeren String
    modified_content = modified_content.replace('€', '')

    with open(output_file, 'w') as outfile:
        outfile.write(modified_content)

    print("Kommas und Eurozeichen wurden erfolgreich entfernt und die Datei wurde abgespeichert.")

# Ordnerpfad definieren
ordnerpfad = "C:\\Users\\XXX\\OneDrive\\ABC\\ABC-Ordner\\"

# Alle Dateien im Ordner "ABC-Ordner" auflisten
dateien = os.listdir(ordnerpfad)

# Liste der CSV-Dateien erstellen
csv_dateien = [datei for datei in dateien if datei.endswith(".csv")]

# Sortieren der Dateien nach Änderungsdatum, um die neueste zu finden
neueste_datei = max(csv_dateien, key=lambda datei: os.path.getmtime(os.path.join(ordnerpfad, datei)))

# Alle älteren CSV-Dateien löschen
for datei in csv_dateien:
    if datei != neueste_datei:
        os.remove(os.path.join(ordnerpfad, datei))

# Input- und Output-Dateipfade für die neueste Datei definieren
input_file = os.path.join(ordnerpfad, neueste_datei)
output_file = os.path.join(ordnerpfad, "modified", neueste_datei.replace(".csv", "CSV_mod.csv"))

# Modifizierte Datei im Unterordner "modified" speichern
if not os.path.exists(os.path.join(ordnerpfad, "modified")):
    os.makedirs(os.path.join(ordnerpfad, "modified"))
replace_commas_and_euro_with_semicolons(input_file, output_file)
 
Ich bin kein Python-Fachmann, aber hast du es mal so probiert:
Python:
modified_content = modified_content.replace(chr(128), '')
oder
Python:
modified_content = modified_content.replace(chr(0128), '')

Sind das ASCII-Zeichen oder UTF-8?
 
Zuletzt bearbeitet:
Habe den Code mit CHATGPT erstellen lassen. Hat bis dato sehr gut geklappt nur das Euro Zeichen macht mir echt Kopfschmerzen
 
Leider hat alles bis dato nicht geklappt. Die CSV weist immer noch das € Zeichen auf bei der Ausgabe. den unten stehenden Code habe ich probiert. Die Ausgabe in Pycharm ist 100 nur in kombination mit ner CSV bockt es rum

xx = "100€"
modified_content = xx.replace(chr(8364), '')
print (modified_content)
 
Habe den Code mit CHATGPT erstellen lassen.
Früher haben wir den Leuten hier im Forum immer gesagt, dass wir nicht ihre Hausaufgaben machen, wenn sie von uns fertige Lösungen wollten. Das hat den ein oder anderen dann doch noch dazu angeregt, sich selbst mit dem Problem auseinanderzusetzen.
Dank AI (= appears intelligent) zieht dieses Druckmittel jetzt nicht mehr.

ordnerpfad = "C:\\Users\\XXX\\OneDrive\\ABC\\ABC-Ordner\\"
Naja, eigentlich verwendet idiomatischer Code UNIX-Separatoren (/) als Trennzeichen. Lassen wir dir das mal durchgehen, da du wahrscheinlich vollständig im Windows-Universum entwickelst. Aber von ChatGPT könnte man da schon mehr erwarten.

modified_content = modified_content.replace('€', '')
Das funktioniert. Und macht genau das, was da steht.
Wo liegt jetzt also der Fehler?

with open(input_file, 'r') as infile:
Idiomatischer Python-Code sollte beim Aufruf von open() immer das **kword encoding mit angeben. Du machst implizit das hier:
Python:
with open(input_file, 'r', encoding='utf-8') as infile:

Die €-Zeichen in der Datei werden deshalb als '\u20ac' in den String geladen, was auch absolut richtig so ist – wenn die Datei denn auch tatsächlich UTF8-kodiert ist.

Aber ist deine Quellcode-Datei das auch? Ich vermute ja, dass deine Datei – weil du eben auf Windows entwickelst – als Latin-1 (Westeuropäisch; ISO 8859-1) abgespeichert wurde. In dem Fall liest Python den Quellcode nun ein, und interpretiert ihn als UTF8, was auch absolut richtig so ist, denn heutzutage sollte alles in UTF8 sein. Aber dann macht diese Zeile
modified_content = modified_content.replace('€', '')
nicht das, was sie eigentlich soll, weil das '€' hier falsch kodiert ist.


Lösungsansätze


  • Stelle sicher, dass deine Quellcodedatei in UTF8 kodiert ist
  • Stelle sicher, dass deine CSV-Datei in UTF8 kodiert ist
  • Alternativ, öffne die Datei in ihrer ursprünglichen Kodierung:
Python:
with open(input_file, 'r', encoding='latin_1') as infile:

Sorry falls ich etwas genervt rüberkomme, aber du bist leider bei weitem nicht der erste, der an dieser neuen AI-ifizierung in der Programmierwelt leidet. Es ist als würde man einem Lagerfeuer zuschauen wie es sich zu einem Waldbrand entwickelt, und kann nichts dagegen tun... sehr frustrierend.


Gruß Technipion
 

Neue Beiträge

Zurück