【问题标题】:Expat parsing in python 3python 3中的外籍人士解析
【发布时间】:2010-11-13 20:07:43
【问题描述】:
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 中无效 - 任何使其在 python 3 中有效的想法都非常感谢。我在ParseFile 行上遇到的错误是TypeError: read() did not return a bytes object (type=str)

【问题讨论】:

    标签: python python-3.x python-2.6


    【解决方案1】:

    您需要将该文件作为二进制文件打开:

    parser.ParseFile(open('sample.xml', 'rb'))
    

    【讨论】:

      【解决方案2】:

      我在尝试将 xmltodict 模块与 Python 3 一起使用时遇到了这个问题。在 Python 2.7 下我没有问题,但在 Python 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-07
        • 2016-01-14
        • 2019-12-13
        • 1970-01-01
        • 2013-07-06
        • 2022-12-17
        • 1970-01-01
        相关资源
        最近更新 更多