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ö 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?
Dateikonvertierung - Problem mit Umlauten
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")
- Bill987654321
- User
- Beiträge: 136
- Registriert: Sonntag 8. März 2020, 10:56
Jetzt erscheint leider eine Fehlermeldung: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")
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()
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")
- Bill987654321
- User
- Beiträge: 136
- Registriert: Sonntag 8. März 2020, 10:56
Jetzt funktioniert es. Der Auswahlpunkt in der Liste ist jetzt bei "utf8". Super. Jetzt stört nur noch das sich öffnende Fenster.Sirius3 hat geschrieben: ↑Montag 9. März 2020, 19:03 Da fehlt ja auch der Mode zum SchreibenCode: Alles auswählen
with open("datei.txt", "w", encoding="utf8") as output: output.write("Schönen Tag.\n")
Warum hast du "WHITH open" und "as output" verwendet? Ich habe beides in keinem Anfängerbuch gelesen.
Muss den Computer jetzt leider ausschalten.
Vielen Dank
- 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.
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.
Natürlich kannst Du auch ohne with arbeiten.
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/
Code: Alles auswählen
output = open("datei.txt", "w", encoding="utf8")
output.write("Schönen Tag.\n")
output.close()
- __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:
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.
Code: Alles auswählen
output = open("datei.txt", "w", encoding="utf8")
try:
output.write("Schönen Tag.\n")
finally:
output.close()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- Bill987654321
- User
- Beiträge: 136
- Registriert: Sonntag 8. März 2020, 10:56
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?Sirius3 hat geschrieben: ↑Montag 9. März 2020, 20:10 Natürlich kannst Du auch ohne with arbeiten.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/Code: Alles auswählen
output = open("datei.txt", "w", encoding="utf8") output.write("Schönen Tag.\n") output.close()
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.
- Bill987654321
- User
- Beiträge: 136
- Registriert: Sonntag 8. März 2020, 10:56
Ich habe weiter oben beschrieben, was ich programmieren möchte. Meinst du, dass es mit "Anfäner-Python" Probleme geben könnte?__blackjack__ hat geschrieben: ↑Dienstag 10. März 2020, 09:35 Wobei das ohne ``with`` eigentlich so aussehen sollte: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.Code: Alles auswählen
output = open("datei.txt", "w", encoding="utf8") try: output.write("Schönen Tag.\n") finally: output.close()
- Bill987654321
- User
- Beiträge: 136
- Registriert: Sonntag 8. März 2020, 10:56
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.Sirius3 hat geschrieben: ↑Montag 9. März 2020, 20:10 Natürlich kannst Du auch ohne with arbeiten.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/Code: Alles auswählen
output = open("datei.txt", "w", encoding="utf8") output.write("Schönen Tag.\n") output.close()
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.
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.
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.
- __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.
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