Sonderzeichen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Feedback1000
User
Beiträge: 88
Registriert: Dienstag 20. September 2022, 21:21

Hallo.

Da ich gerade mit Python starte, stehe ich schon am Anfang vor Problemen, die ich nicht erklimmen kann. Ich hoffe auf eure Hilfe.

Mit

Code: Alles auswählen

file_messdatei = "Testdatei.txt"
path_datei = "C:\\ABC\\XYZ"

datei = open(path_datei + "/" + file_datei, "r")
print(datei.read())
datei.close()
gebe ich den Inhalt einer Textdatei aus. Allerdings gibt es augenscheinlich ein Problem mit den Sonderzeichen (ÄÖÜ äöü oder auch !"§$%&/()=?`ß²³µ~*+#'><|_-.:,;,), die teilweise falsch dargestellt werden.
Die Textdatei selbst ist utf-8 codiert.

Könnt ihr mir sagen, was das Problem ist?

Mit Dank und vielen Grüßen
Feedback
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Beim Öffnen einer Textdatei muß man immer das richtige Encoding angeben.
Dateien öffnet man innerhalb des with-Statements. Statt Pfade mit + zusammenzustückeln benutzt man pathlib.Path.

Code: Alles auswählen

from pathlib import Path
PATH_TO_FILE = Path("C:/ABC/XYZ")
FILENAME_MEASUREMENT = "Testdatei.txt"

def main():
    with (PATH_TO_FILE / FILENAME_MEASUREMENT).open("r", encoding="utf-8") as file:
        print(file.read())
        
if __name__ == "__main__":
    main()
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei man den speziellen Fall die gesamte Datei einzulesen noch abkürzen kann, weil `Path` dafür eine eigene Methode besitzt:

Code: Alles auswählen

from pathlib import Path

PATH_TO_FILE = Path("C:/ABC/XYZ")
FILENAME_MEASUREMENT = "Testdatei.txt"


def main():
    print((PATH_TO_FILE / FILENAME_MEASUREMENT).read_text(encoding="utf-8"))


if __name__ == "__main__":
    main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten