Seite 1 von 1

Textdatei mit Python schreiben (FEHLER)

Verfasst: Montag 29. November 2021, 15:28
von THE_PYTHON_GUY
Hallo,
leider printed dieses Programm nur die variable zahl, aber schreibt sie nicht.

Code: Alles auswählen

p=print
datei = open('1.txt', 'r')
file = datei.read()
datei.close()
zahl = file
zahl = zahl.replace('a', "{")
zahl = zahl.replace('A', '{')
zahl = zahl.replace('b', '}')
zahl = zahl.replace('B', '}')
zahl = zahl.replace('c', '|')
zahl = zahl.replace('C', '|')
zahl = zahl.replace('d', '~')
zahl = zahl.replace('D', '~')
zahl = zahl.replace('e', '€')
zahl = zahl.replace('E', '€')
zahl = zahl.replace('f', '꛳')
zahl = zahl.replace('F', '꛳')
zahl = zahl.replace('g', '𑅃')
zahl = zahl.replace('G', '𑅃')
zahl = zahl.replace('h', '꘏')
zahl = zahl.replace('H', '꘏')
zahl = zahl.replace('i', '℻')
zahl = zahl.replace('I', '℻')
zahl = zahl.replace('j', '°')
zahl = zahl.replace('J', '°')
zahl = zahl.replace('k', '$')
zahl = zahl.replace('k', '$')
zahl = zahl.replace('l', '(')
zahl = zahl.replace('L', '(')
zahl = zahl.replace('m', '`')
zahl = zahl.replace('M', "`")
zahl = zahl.replace('n', '*')
zahl = zahl.replace('N', '*')
zahl = zahl.replace('o', '^')
zahl = zahl.replace('O', '^')
zahl = zahl.replace('p', '&')
zahl = zahl.replace('P', '&')
zahl = zahl.replace('q', '/')
zahl = zahl.replace('Q', '/')
zahl = zahl.replace('r', '=')
zahl = zahl.replace('R', '=')
zahl = zahl.replace('s', '-')
zahl = zahl.replace('S', '-')
zahl = zahl.replace('T', '_')
zahl = zahl.replace('t', '_')
zahl = zahl.replace('u', '#')
zahl = zahl.replace('U', '#')
zahl = zahl.replace('v', ';')
zahl = zahl.replace('V', ';')
zahl = zahl.replace('w', '☮')
zahl = zahl.replace('W', '☮')
zahl = zahl.replace('x', '<')
zahl = zahl.replace('X', '<')
zahl = zahl.replace('y', '>')
zahl = zahl.replace('Y', '>')
zahl = zahl.replace('z', '§')
zahl = zahl.replace('Z', '§')
zahl = zahl.replace("1", "⟲")
zahl = zahl.replace("2", "᧖")
zahl = zahl.replace("3", "☢")
zahl = zahl.replace("4", "፥")
zahl = zahl.replace("5", "☽")
zahl = zahl.replace("6", "☛")
zahl = zahl.replace("7", "꧙")
zahl = zahl.replace("8", "𑁣")
zahl = zahl.replace("9", "ᗯ")
zahl = zahl.replace("0", "卄")
p(zahl)
datei = open('2.txt', 'a')
datei.write(zahl)
datei.close()
Der Fehlercode lautet:

Code: Alles auswählen

UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>

Re: Textdatei mit Python schreiben (FEHLER)

Verfasst: Montag 29. November 2021, 15:40
von __deets__
Zum oeffnen von Dateien benutzt man das with-statement. Damit werden die automatisch geschlossen. Und beim oeffnen einer Datei gibt man das erwartete encoding mit an. Fuer deinen Fall wohl am besten UTF-8. Und dann baut man nicht 100 mal die gleiche Zeile Code. Sondern deklariert eine Uebersetzungstabelle.

Code: Alles auswählen

import sys
TRANSLATIONS = {
   "7": "꧙",
   }


def main():
    with open(sys.argv[1], encoding="utf-8") as inf:
        text = inf.read()
    translated = "".join(TRANSLATIONS.get(c, c) for c in text)
    with open(sys.argv[2], "w", encoding="utf-8") as outf:
        outf.write(translated)


if __name__ == '__main__':
    main()

Re: Textdatei mit Python schreiben (FEHLER)

Verfasst: Montag 29. November 2021, 17:23
von __blackjack__
Wobei eventuell die `translate()`-Methode auf Zeichenketten einen Blick Wert sein könnte.

Re: Textdatei mit Python schreiben (FEHLER)

Verfasst: Montag 29. November 2021, 17:25
von __deets__
Ich habe die relativ bewusst nicht angeschaut, weil sie zumindest frueher einfach nur Byte-Ersetzungen vorgenommen hat. Ist die inzwischen unicode-faehig? Dann ist das natuerlich besser.

Re: Textdatei mit Python schreiben (FEHLER)

Verfasst: Montag 29. November 2021, 17:29
von __blackjack__
@__deets__: Die war früher (also mindestens bei Python 2.7) auch schon unicode-fähig. Also die auf `unicode`-Objekten — nicht die auf `str`-Objekten. 🙂

Re: Textdatei mit Python schreiben (FEHLER)

Verfasst: Montag 29. November 2021, 17:36
von __deets__
Dann ist die natuerlich besser.

Re: Textdatei mit Python schreiben (FEHLER)

Verfasst: Montag 29. November 2021, 17:49
von Sirius3
@THE_PYTHON_GUY: print durch p abzukürzen, hat gleich drei Nachteile auf einmal: Du benutzt ein kryptisches Zeichen für eine bekannte Funktion, das heißt, man muß nicht nur p entziffern sondern auch nachschauen, was p denn eigentlich bedeutet, statt einfach nur `print` zu lesen und gleich zu wissen was passiert.
Warum nennst Du den Inhalt einer Datei `file` und warum nennst Du diese Variable dann in `zahl` um, wo bei all diesen komischen Zeichen der Inhalt bestimmt keine Zahl ist.

Re: Sirius3

Verfasst: Montag 29. November 2021, 21:21
von THE_PYTHON_GUY
@Sirius3, zu dem print dieser Code ist eigentlich nur für den Eigenbedarf bestimmt daher ist das eigentlich auch egal. Die Variable "zahl" stammt aus einem äteren Skript, wo "zahl" noch sinn ergeben hätte, dieses habe ich aber abgewandelt und aus zeitgründen nicht noch die Variable bei jedem Befehl umgeschrieben.

Trotzdem danke!