Ошибка синтаксического анализа XML из файла, но не как строка? питон

Я пытаюсь использовать xml2dict чтобы проанализировать большое количество XML-файлов, чтобы я мог превратить их в кадры данных, однако, когда я пытаюсь проанализировать фактические XML-файлы, я получаю сообщение об ошибке:

"ExpatError: not well-formed (invalid token): line 1, column 5"

Эта ошибка абсолютно одинакова для всех XML-файлов, включая "строку 1, столбец 5", которые значительно различаются по длине, но одинаковы по структуре.

Когда я пытаюсь скопировать содержимое XML-файла в виде строки в Python, синтаксический анализ с xml2dict работает отлично. Например:

xmlstr ="""<?xml version="1.0" encoding="utf-8"?>
<document id="DDI-DrugBank.d200">
    <sentence id="DDI-DrugBank.d200.s0" text="Co-administration of probenecid with acyclovir has been shown to increase the mean half-life and the area under the concentration-time curve.">
        <entity id="DDI-DrugBank.d200.s0.e0" charOffset="21-30"
            type="drug" text="probenecid"/>
        <entity id="DDI-DrugBank.d200.s0.e1" charOffset="37-45"
            type="drug" text="acyclovir"/>
        <pair id="DDI-DrugBank.d200.s0.p0" e1="DDI-DrugBank.d200.s0.e0"
            e2="DDI-DrugBank.d200.s0.e1" ddi="true" type="mechanism"/>
    </sentence>
    <sentence id="DDI-DrugBank.d200.s1" text="Urinary excretion and renal clearance were correspondingly reduced."/>
    <sentence id="DDI-DrugBank.d200.s2" text="The clinical effects of this combination have not been studied."/>
</document>"""

import xmltodict as x2d

nestdict1 = x2d.parse('Train/DrugBank/Aciclovir_ddi.xml')

nestdict2 = x2d.parse(xmlstr)

В приведенном выше примере nestdict1 выдает ошибку пока nestdict2 хорошо, несмотря на xmlstr прямое копирование и вставка из файла 'Train/DrugBank/Aciclovir_ddi.xml'

1 ответ

Решение

Вам нужно передать объект файла, а не строку, которая является именем файла.

Из документов:

In [4]:print(xmltodict.parse.__doc__)
Parse the given XML input and convert it into a dictionary.

    `xml_input` can either be a `string` or a file-like object.

Итак, создайте дескриптор файла, например:

fd = open("Train/DrugBank/Aciclovir_ddi.xml")

А затем передайте его методу разбора:

x2d.parse(fd)
Другие вопросы по тегам