builtins.TypeError:必须是str,而不是字节
我已将Python 2.7的脚本转换为3.2,并且有一些错误。builtins.TypeError:必须是str,而不是字节
# -*- 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)
在最后一行我得到了一个错误:
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)
我已经安装了蟒蛇3.2,我已经安装了LXML-2.3.win32-py3.2.exe。
在2.7它工作。
outfile应该是二进制模式。
outFile = open('output.xml', 'wb')
头脑风暴。 Python3已经重新设想了如何处理这个小小的'b'。它过去只会让那些忘记包含它的Windows用户烦恼(或者因为他们使用的是stdio而不能这样做)。现在它可以在所有平台上激怒Python用户。希望这将是值得的痛苦。 – nobar 2013-08-17 06:11:04
如果你正在解析文本,这绝对是值得的。 – 2014-01-15 21:56:50
@nobar需要例如关闭通用换行支持,http://legacy.python.org/dev/peps/pep-0278/,默认在Python 3中启用 – user7610 2014-07-26 15:28:27
将二进制文件转换为base64 &反之亦然。在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
更多当然不能:) – djperalta 2017-04-23 01:06:16
请包括一个解释,一个代码只有转储并不能真正帮助人们理解解决方案。 – 2017-04-23 10:51:10
没有真正调查过这一点,但一个简单的猜测是你应该以二进制模式打开文件。 – 2011-04-01 11:39:03