builtins.TypeError: doit être str, pas des octets

J’ai converti mes scripts python 2.7 à 3.2, et j’ai des bogues.

# -*- 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 atsortingbutes, use as shown above # Save to XML file outFile = open('output.xml', 'w') doc.write(outFile) 

en dernière ligne j’ai eu une erreur:

 builtins.TypeError: must be str, not bytes File "C:\PythonExamples\XmlReportGeneratorExample.py", line 29, in  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) 

J’ai installé python 3.2 et j’ai installé lxml-2.3.win32-py3.2.exe.

À 2.7 ça marche.

Le fichier doit être en mode binary.

 outFile = open('output.xml', 'wb') 

Convertir le fichier binary en base64 et vice versa. Prouvez en 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