builtins.TypeError: must be str, not bytes

感情迁移 提交于 2019-11-26 10:09:44

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!