ElementTree TypeError "write() argument must be str, nicht bytes" in Python ist3
Hab ein Problem mit der Erzeugung ein .SVG-Datei mit Python ist3 und ElementTree.
from xml.etree import ElementTree as et
doc = et.Element('svg', width='480', height='360', version='1.1', xmlns='http://www.w3.org/2000/svg')
#Doing things with et and doc
f = open('sample.svg', 'w')
f.write('<?xml version=\"1.0\" standalone=\"no\"?>\n')
f.write('<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n')
f.write('\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n')
f.write(et.tostring(doc))
f.close()
Die Funktion et.tostring(doc) erzeugt eine TypeError - "write() argument must be str, nicht Byte". Ich verstehe nicht, dass das Verhalten, "et" sollte konvertieren Sie die ElementTree-Element in einen string? Es funktioniert in python2, aber nicht in Python ist3. Was habe ich falsch gemacht?
- Haben Sie überprüfen der Dokumentation? Siehe dieser Seite und suchen Sie nach
tostring
. Hilft das? - nicht wirklich, es soll entschlüsselt werden, die bereits in utf-8 bytestring, aber Python ist3 scheint ein problem mit, dass
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als es stellt sich heraus,
tostring
, trotz seines namens, wirklich hat gibt ein Objekt zurück, dessen Typbytes
.Seltsamere Dinge passiert. Wie auch immer, hier ist der Beweis:
Albern, nicht wahr?
Glücklicherweise können Sie dies tun:
Ja, wir dachten alle, die Lächerlichkeit der bytes, die alten, vierzig-plus-Jahr-alten-und-veraltet-Codierung genannt
ascii
tot war.Und nicht get mich begann auf die Tatsache, dass Sie
"unicode"
eine Codierung!!!!!!!!!!!type(tostring(element))
. Und dann sehen Sie das Ergebnis ändern, weil eine änderung an einem Parameterwert. Wow. Das war wirklich seltsam. Schöne Frage.Versuchen:
Beispiel:
Angabe der Kodierung der Zeichenfolge, während das schreiben der xml-Datei.
Wie
decode(UTF-8)
mitwrite()
.Beispiel:
file.write(etree.tostring(doc).decode(UTF-8))
Die output-Datei muss im Binär-Modus.
War es für mich am einfachsten zu erstellen, die erste template-xml (nur die Definition der Wurzel) und dann analysieren...
dann tun, was ich tun wollte in meinem xml und drucken Sie es...