Dateikonvertierung - Problem mit Umlauten

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
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Hallo,

ich habe in Python über open, write und close eine Texdatei (.txt) erzeugt. Wenn ich sie in Word öffne erscheint das Dialogfenster "Dateikonvertierung....". Es ist immer "Andere Codierung" ausgewählt, mit der der Text "Schönen Tag" nicht korrekt angezeigt wird (Das "ö" wird falsch angezeigt). Ich klicke dann "Windows (Standard)" an. So wird "Schönen Tag" richtig angezeigt.
Jedes mal, wenn ich die Textdatei öffne ist der Ablauf so.
Inzwischen habe ich festgestellt, dass der Text richtig angezeigt wird wenn ich "ö" durch "oe" ersetze. Das Problem gibt es also nur bei Umlauten.
Weil ich alle Reiter nach dem Öffnen in Word durchgesucht habe, um das Problem zu beheben, dies aber nicht geklappt hat, vermute ich, dass ich in einer Python Datei etwas ändern muss, weil ja Python die Datei generiert und öffnet.

Wie/Wo kann ich eine Änderung vornehmen, dass die Datei automatisch mit "Windows (Standard)" geöffnet wird? Außerdem möchte ich, dass das Fenster nach der richtigen Einstellung überhaupt nicht mehr erscheint.

Wer kann mir hier weiterhelfen?

Schö :o nen Abend

Eigentlich wollte ich hier einen Screenshot einfügen. Wie funktioniert das? Muss ich die .png-Datei in eine .img-Datei umwandeln, um sie einfügen zu können?
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Was passiert denn, wenn Du die Datei in Python mit encoding="utf8" speicherst? Man sollte eigentlich immer ein Encoding angeben, damit man weiß welches zum Schreiben benutzt wird.

Code: Alles auswählen

with open("datei.txt", encoding="utf8") as output:
    output.write("Schönen Tag.\n")
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Sirius3 hat geschrieben: Montag 9. März 2020, 18:26 Was passiert denn, wenn Du die Datei in Python mit encoding="utf8" speicherst? Man sollte eigentlich immer ein Encoding angeben, damit man weiß welches zum Schreiben benutzt wird.

Code: Alles auswählen

with open("datei.txt", encoding="utf8") as output:
    output.write("Schönen Tag.\n")
Jetzt erscheint leider eine Fehlermeldung:

Traceback (most recent call last):
File "C:\Users\pc\Desktop\Python Programme\In File schreiben.py", line 2, in <module>
with open("datei.txt", encoding="utf8") as output:
FileNotFoundError: [Errno 2] No such file or directory: 'datei.txt'
>>>

Mein gesamter Code ist:
# Erzeugen der Datei Übungsdatei
with open("datei.txt", encoding="utf8") as output:
output.write("Schönen Tag.\n")
file.close()
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Da fehlt ja auch der Mode zum Schreiben

Code: Alles auswählen

with open("datei.txt", "w", encoding="utf8") as output:
    output.write("Schönen Tag.\n")
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Sirius3 hat geschrieben: Montag 9. März 2020, 19:03 Da fehlt ja auch der Mode zum Schreiben

Code: Alles auswählen

with open("datei.txt", "w", encoding="utf8") as output:
    output.write("Schönen Tag.\n")
Jetzt funktioniert es. Der Auswahlpunkt in der Liste ist jetzt bei "utf8". Super. Jetzt stört nur noch das sich öffnende Fenster.

Warum hast du "WHITH open" und "as output" verwendet? Ich habe beides in keinem Anfängerbuch gelesen. :o

Muss den Computer jetzt leider ausschalten.

Vielen Dank
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Das with ist die bevorzugte Methode, um mit Dateien zu arbeiten. Das sollte man bei open gleich mitlernen. Ob man des Fenster bei Word verhindern kann, weiß ich gerade nicht, weil ich kein Word zur Hand habe.
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Ich will dich jetzt nicht verärgern. Mir wäre "Anfängercode" am liebsten. In meiner Zeitschrift und meinem Anfängerbuch steht, wie bereits geschrieben, nichts von "with" und "as Output" drin. Das wirft nur neue Fragen für mich auf.

Ich werde meine Eingaben zukünftig ohne Umlaute tätigen. Dann brauchst du auch nicht schauen, wie man verhindert, das sich das Fenster öffnet.

Ich schreibe bzw. möchte ein Programm schreiben, dass Tabellen (Sporttabellen, wie z.B. 1. Fußballbundesliga, Eishockeyliga) generiert. Außerdem sollen die eingegebenen Spielergebnisse gespeichert werden. Das Programm soll dann immer die neue Tabelle errechnen, wenn neue Ergebnisse eingegeben wurden und die Tabelle dann auf dem Monitor und dem Drucker ausgegeben werden. Als Krönung möchte ich eine Tabellenplatzverlaufskurve für jede Mannschaft programmieren.

Die Eingabe der Mannschaften (zum Testen setze ich die Laufvariable auf 4) und das Speichern im File funktioniert bereits.

Vielen Dank für die Hilfe und hoffentlich bis bald.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Natürlich kannst Du auch ohne with arbeiten.

Code: Alles auswählen

output = open("datei.txt", "w", encoding="utf8")
output.write("Schönen Tag.\n")
output.close()
Wenn Du nur eine Druckvorlage erstellen willst, käme auch ein Modul zum schrieben von PDF in Frage. Oder etwas, das direkt .docx schreiben kann: https://python-docx.readthedocs.io/en/latest/
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei das ohne ``with`` eigentlich so aussehen sollte:

Code: Alles auswählen

output = open("datei.txt", "w", encoding="utf8")
try:
    output.write("Schönen Tag.\n")
finally:
    output.close()
Oder eben gleich mit ``with``. Schlechte Anfängerliteratur sollte da keine Begründung sein. Das Tutorial in der Python-Dokumentation führt ``with`` beispielsweise im Abschnitt zum lesen und schreiben von Dateien ein. Ausserdem kann man sich nicht wirklich auf diesen ”Anfänger”-Standpunkt stellen wenn man robuste, funktionierende Programme schreiben will. Sehr viel Anfängerliteratur blendet auch Kodierungen aus und hat deshalb nicht den Hinweis das man bei Textdateien explizit eine Kodierung angeben sollte. In der Realität macht das dann aber irgendwann früher oder später Probleme wenn man sich damit nicht auseinander setzt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Sirius3 hat geschrieben: Montag 9. März 2020, 20:10 Natürlich kannst Du auch ohne with arbeiten.

Code: Alles auswählen

output = open("datei.txt", "w", encoding="utf8")
output.write("Schönen Tag.\n")
output.close()
Wenn Du nur eine Druckvorlage erstellen willst, käme auch ein Modul zum schrieben von PDF in Frage. Oder etwas, das direkt .docx schreiben kann: https://python-docx.readthedocs.io/en/latest/
Kann man das "encoding="utf8" nicht auch gleich an den Anfang des Programmes setzen, damit das für das gesamte Programm gilt? Könnte man sich so nicht Tipparbeit sparen?

Ein Modul möchte ich (zumindest vorerst) nicht verwenden. Was ist eine "Druckvorlage"?

Ich möchte mir das Programmieren in Python so einfach wie möglich halten und es mir nicht selbst erschweren.
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

__blackjack__ hat geschrieben: Dienstag 10. März 2020, 09:35 Wobei das ohne ``with`` eigentlich so aussehen sollte:

Code: Alles auswählen

output = open("datei.txt", "w", encoding="utf8")
try:
    output.write("Schönen Tag.\n")
finally:
    output.close()
Oder eben gleich mit ``with``. Schlechte Anfängerliteratur sollte da keine Begründung sein. Das Tutorial in der Python-Dokumentation führt ``with`` beispielsweise im Abschnitt zum lesen und schreiben von Dateien ein. Ausserdem kann man sich nicht wirklich auf diesen ”Anfänger”-Standpunkt stellen wenn man robuste, funktionierende Programme schreiben will. Sehr viel Anfängerliteratur blendet auch Kodierungen aus und hat deshalb nicht den Hinweis das man bei Textdateien explizit eine Kodierung angeben sollte. In der Realität macht das dann aber irgendwann früher oder später Probleme wenn man sich damit nicht auseinander setzt.
Ich habe weiter oben beschrieben, was ich programmieren möchte. Meinst du, dass es mit "Anfäner-Python" Probleme geben könnte?
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Sirius3 hat geschrieben: Montag 9. März 2020, 20:10 Natürlich kannst Du auch ohne with arbeiten.

Code: Alles auswählen

output = open("datei.txt", "w", encoding="utf8")
output.write("Schönen Tag.\n")
output.close()
Wenn Du nur eine Druckvorlage erstellen willst, käme auch ein Modul zum schrieben von PDF in Frage. Oder etwas, das direkt .docx schreiben kann: https://python-docx.readthedocs.io/en/latest/
Habe mir gerade den Link angeschaut. Das kommt für mich nicht in Frage. Ich möchte alles was ich in mein Programm schreibe auch verstehen. Das müsste ich kopieren und würde sehr lange benötigen um das alles zu verstehen.

Bist du hauptberuflich Python-Programmierer :?:

Kennst du gute Python-Tutorials? Ich meine mit "gut" Tutorials, die anhand von Beispielprogrammen das Programmieren erklären und auch wissen, was Anfänger so alles falsch machen, darauf hinweisen und auch gleich erklären, was man ändern muss. Hilfreich ist auch wenn Fehlermeldungen erklärt werden würden, die der Computer ausgibt. Ich habe z.B. "print" groß geschrieben. So hat es der Computer "print" nicht als Befehl zum Drucken erkannt, sondern als Variable. Außerdem habe ich bei einem zusammengesetzten input-Befehl Kommas anstatt Pluszeichen gesetzt. Dann kam eine Fehlermeldung so ungefähr: Python hat nur eine "Angabe?" erwartet aber 2 bekommen. Bis ich eine Erklärung incl. Lösung beim Googeln gefunden habe, habe ich eine Stunde gebraucht.
Zuletzt geändert von Bill987654321 am Dienstag 10. März 2020, 16:52, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Das Encoding ist eine Eigenschaft der Datei. Also muss sie auch beim Öffnen stehen. Wenn das an mehreren Stellen gebraucht wird, könnte eine Funktion sinnvoll sein. Nach deiner Beschreibung ging ich davon aus, dass Du eine Art Tabelle willst. Wenn es also um Formatierung geht, kommst du zum ein spezialisiertes Modul nicht drumrum. Du musst ja auch nur verstehen, wie man es anwendet. Dafür gibt es Dokumentation.
Und als Anfänger (wie auch als Experte) sollte man das lernen, was man zum Lösen seines Problems braucht, genau dann, wenn man es braucht.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Bill987654321: Die Kodierung kann man nicht global angeben weil ja jede Textdatei anders kodiert sein kann. Ausserdem wäre das dann globaler Zustand, den man sowieso meiden sollte.

Sich das Programmieren so einfach wie möglich machen wollen und (externe) Module vermeiden ist häufig ein Zielkonflikt.

Was ist denn ”Anfänger-Python”? Es gibt die Realität und da ist es sinnvoll Dateien explizit und zuverlässig zu schliessen. Dabei ist es egal ob man Anfänger oder Fortgeschrittener ist. Auch Anfänger sollten von vornherein mit Ressourcen ordentlich umgehen und sich nicht auf Implementierungsdetails von CPython verlassen die nicht garantiert sind. Und selbst dort überraschenderweise manchmal ausgehebelt werden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten