Разбор XML с использованием xml.etree в python генерирует TypeError - PullRequest
0 голосов
/ 28 сентября 2018

Я пишу фрагмент кода, который извлекает данные из набора XML-документов.

Код работает так, как задумано для файлов по отдельности;однако, когда я перебираю файлы, я получаю странную ошибку.

Код выглядит следующим образом:

import xml.etree.ElementTree as ET
import os

for root,dirs,files in os.walk(path):
    for file in files:
        if file.endswith(".xml"):
            tree = ET.parse(os.path.join(root,file))
            root = tree.getroot()

Когда я выполняю код, появляется следующая ошибка:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-85cdfa81e486> in <module>()
      4     for file in files:
      5         if file.endswith(".xml"):
----> 6             tree = ET.parse(os.path.join(root,file))
      7             root = tree.getroot()

~/.pyenv/versions/3.6.0/lib/python3.6/posixpath.py in join(a, *p)
     76     will be discarded.  An empty last part will result in a path that
     77     ends with a separator."""
---> 78     a = os.fspath(a)
     79     sep = _get_sep(a)
     80     path = a

TypeError: expected str, bytes or os.PathLike object, not xml.etree.ElementTree.Element 

Если я удалю последнюю строку root = tree.getroot(), тогда все снова начнет работать.У меня нет ни малейшего представления о том, что происходит.

1 Ответ

0 голосов
/ 28 сентября 2018

Вы используете одно и то же имя (root) для 2 разных переменных в вашем коде (для циклического прохождения по вашему пути, а другое - для получения корня xml):

tree = ET.parse(os.path.join(root,file)) #root for your path/folder structure
root = tree.getroot() #root for your xml tree - should use different name

Используйте другое имя переменной для одной изим.

...