Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

builtins.TypeError: must be str, not bytes

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.

like image 239
user278618 Avatar asked Apr 01 '11 11:04

user278618


2 Answers

The outfile should be in binary mode.

outFile = open('output.xml', 'wb') 
like image 165
Lennart Regebro Avatar answered Sep 20 '22 15:09

Lennart Regebro


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 
like image 45
djperalta Avatar answered Sep 17 '22 15:09

djperalta