Hi so I’ve been struggling with this and can’t quite figure out why I’m getting errors. Trying to export just some basic XML into a new file, keeps giving me a TypeError. Below is a small sample of the code
from xml.etree.ElementTree import ElementTree from xml.etree.ElementTree import Element from xml.etree.ElementTree import SubElement import xml.etree.ElementTree as ET root = Element('QuoteWerksXML') tree = ElementTree(root) ver = SubElement(root, "AppVersionMajor") ver.text = '5.1' tree.write(open('person.xml', 'w'))
Advertisement
Answer
The ElementTree.write
method defaults to us-ascii encoding and as such expects a file opened for writing binary:
The output is either a string (str) or binary (bytes). This is controlled by the encoding argument. If encoding is
"unicode"
, the output is a string; otherwise, it’s binary. Note that this may conflict with the type of file if it’s an open file object; make sure you do not try to write a string to a binary stream and vice versa.
So either open the file for writing in binary mode:
with open('person.xml', 'wb') as f: tree.write(f)
or open the file for writing in text mode and give "unicode"
as encoding:
with open('person.xml', 'w') as f: tree.write(f, encoding='unicode')
or open the file for writing in binary mode and pass an explicit encoding:
with open('person.xml', 'wb') as f: tree.write(f, encoding='utf-8')