问题
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:\\PythonExamples\\XmlReportGeneratorExample.py\", line 29, in <module>
doc.write(outFile)
File \"c:\\Python32\\Lib\\site-packages\\lxml\\etree.pyd\", line 1853, in lxml.etree._ElementTree.write (src/lxml/lxml.etree.c:44355)
File \"c:\\Python32\\Lib\\site-packages\\lxml\\etree.pyd\", line 478, in lxml.etree._tofilelike (src/lxml/lxml.etree.c:90649)
File \"c:\\Python32\\Lib\\site-packages\\lxml\\etree.pyd\", line 282, in lxml.etree._ExceptionContext._raise_if_stored (src/lxml/lxml.etree.c:7972)
File \"c:\\Python32\\Lib\\site-packages\\lxml\\etree.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.
回答1:
The outfile should be in binary mode.
outFile = open('output.xml', 'wb')
回答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
来源:https://stackoverflow.com/questions/5512811/builtins-typeerror-must-be-str-not-bytes