I’ve converted my scripts from Python 2.7 to 3.2, and I have a bug.
# -*- coding: utf-8 -*-
import time
from datetime import date
from lxml import etree
from collections import OrderedDict
# Create the root element
page = etree.Element('results')
# Make a new document tree
doc = etree.ElementTree(page)
# Add the subelements
pageElement = etree.SubElement(page, 'Country',Tim = 'Now',
name='Germany', AnotherParameter = 'Bye',
Code='DE',
Storage='Basic')
pageElement = etree.SubElement(page, 'City',
name='Germany',
Code='PZ',
Storage='Basic',AnotherParameter = 'Hello')
# For multiple multiple attributes, use as shown above
# Save to XML file
outFile = open('output.xml', 'w')
doc.write(outFile)
On the last line, I got this error:
builtins.TypeError: must be str, not bytes File "C:PythonExamplesXmlReportGeneratorExample.py", line 29, in <module> doc.write(outFile) File "c:Python32Libsite-packageslxmletree.pyd", line 1853, in lxml.etree._ElementTree.write (src/lxml/lxml.etree.c:44355) File "c:Python32Libsite-packageslxmletree.pyd", line 478, in lxml.etree._tofilelike (src/lxml/lxml.etree.c:90649) File "c:Python32Libsite-packageslxmletree.pyd", line 282, in lxml.etree._ExceptionContext._raise_if_stored (src/lxml/lxml.etree.c:7972) File "c:Python32Libsite-packageslxmletree.pyd", line 378, in lxml.etree._FilelikeWriter.write (src/lxml/lxml.etree.c:89527)
I’ve installed Python 3.2, and I’ve installed lxml-2.3.win32-py3.2.exe.
On Python 2.7 it works.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
The outfile should be in binary mode.
outFile = open('output.xml', 'wb')
Method 2
Convert binary file to base64 & vice versa. Prove in python 3.5.2
import base64
read_file = open('/tmp/newgalax.png', 'rb')
data = read_file.read()
b64 = base64.b64encode(data)
print (b64)
# Save file
decode_b64 = base64.b64decode(b64)
out_file = open('/tmp/out_newgalax.png', 'wb')
out_file.write(decode_b64)
# Test in python 3.5.2
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0