Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python3中的Expat解析_Python_Python 3.x_Python 2.6 - Fatal编程技术网

python3中的Expat解析

python3中的Expat解析,python,python-3.x,python-2.6,Python,Python 3.x,Python 2.6,上述内容在Python2.6中可用,但在Python3.0中不可用——任何使其在Python3中工作的想法都值得赞赏。我在ParseFile行上遇到的错误是TypeError:read()没有返回字节对象(type=str)您需要以二进制文件的形式打开该文件: import xml.parsers.expat def start_element(name, attrs): print('Start element:', name, attrs) def end_element(nam

上述内容在Python2.6中可用,但在Python3.0中不可用——任何使其在Python3中工作的想法都值得赞赏。我在
ParseFile
行上遇到的错误是
TypeError:read()没有返回字节对象(type=str)

您需要以二进制文件的形式打开该文件:

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'))

我在尝试将模块与Python3一起使用时遇到了这个问题。在Python2.7下,我没有遇到任何问题,但在Python3下,我遇到了同样的错误。解决方案与@SilentGhost建议的相同:

parser.ParseFile(open('sample.xml', 'rb'))
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