تحليل المغتربين في بيثون 3
-
19-09-2019 - |
سؤال
import xml.parsers.expat
def start_element(name, attrs):
print('Start element:', name, attrs)
def end_element(name):
print('End element:', name)
def character_data(data):
print('Character data: %s' % data)
parser = xml.parsers.expat.ParserCreate()
parser.StartElementHandler = start_element
parser.EndElementHandler = end_element
parser.CharacterDataHandler = character_data
parser.ParseFile(open('sample.xml'))
الأعمال المذكورة أعلاه في Python 2.6 ولكن ليس في Python 3.0 - أي أفكار لجعلها تعمل في ثعبان 3 تقدير كبير. الخطأ الذي أحصل عليه ParseFile
خط هو TypeError: read() did not return a bytes object (type=str)
المحلول
تحتاج إلى فتح هذا الملف ثنائي:
parser.ParseFile(open('sample.xml', 'rb'))
نصائح أخرى
ركضت في هذه المشكلة أثناء محاولة استخدام xmltodict. الوحدة مع بيثون 3. تحت بايثون 2.7 لم يكن لدي أي مشاكل ولكن تحت ثعبان 3 حصلت على هذا الخطأ هذا الخطأ. الحل هو نفسه الذي اقترحه silentghost:
import xmltodict
def convert(xml_file, xml_attribs=True):
with open(xml_file, "rb") as f: # notice the "rb" mode
d = xmltodict.parse(f, xml_attribs=xml_attribs)
return d
لا تنتمي إلى StackOverflow