বিল্টিনস.টাইপ এরিয়ার: অবশ্যই বাইট নয়, স্ট্র হতে হবে


220

আমি আমার স্ক্রিপ্টগুলি পাইথন ২.7 থেকে ৩.২ এ রূপান্তর করেছি এবং আমার একটি বাগ রয়েছে।

# -*- 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)

আমি পাইথন ৩.২ ইনস্টল করেছি এবং আমি lxML-2.3.win32-py3.2.exe ইনস্টল করেছি।

পাইথন ২.7 এ এটি কাজ করে।


10
এটি সত্যিই তদন্ত করেনি, তবে একটি দ্রুত অনুমান করা উচিত যে আপনার ফাইলটি বাইনারি মোডে খোলা উচিত।
সোভেন মারনাচ

উত্তর:


484

আউটফাইলটি বাইনারি মোডে থাকা উচিত।

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

100
মন ফুঁকছে। পাইথন 3 সামান্য 'বি' দিয়ে কী করবে তা পুনর্বিবেচনা করেছে। এটি কেবল উইন্ডোজ ব্যবহারকারীদের বিরক্ত করত যারা এটিকে অন্তর্ভুক্ত করতে ভুলে যাবে (বা তারা স্টডিও ব্যবহার করছিল না কারণ) এখন এটি পাইথন ব্যবহারকারীদের সমস্ত প্ল্যাটফর্মে বিরক্ত করতে পারে। আশা করি, এটি ব্যথার জন্য মূল্যবান হবে।
নোবার

5
আপনি যদি পাঠ্যকে বিশ্লেষণ করছেন তবে এটি অবশ্যই মূল্যবান।
লেনার্ট রেজেব্রো

@ নোবার উদাহরণস্বরূপ, পাইথন 3-এ ডিফল্টরূপে থাকা ইউনিভার্সাল নিউলাইন সমর্থন, লিগ্যাসি.প্যাথন.আর.দেব / পেপস / পেপ-0278 বন্ধ করা দরকার
ইউজার 7610

অজগর 3 এর জন্য আমার জন্য জিপিতে কাজ করে! json.load(gzip.open('file.json.gz'))ব্যর্থ, এবং json.load(gzip.open('file.json.gz', 'rt'))সফল!
hobs

@ লেননার্টজেজব্রো, সিস্টেম সেটিং অপ্রত্যাশিত হলে তা নয়। বাইনারি সেরা এবং কম ত্রুটিযুক্ত প্রবণ। যদি এটি কাজ করে তবে এটি সত্যই কাজ করে। পাঠ্য হিসাবে, সবসময় একটি "কি যদি" ​​জড়িত আছে।
পেসারিয়ার

6

বাইনারি ফাইলকে বেস 64 এ রূপান্তর করুন এবং বিপরীতে। অজগর প্রমাণ করুন 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.