在python中使用xml.etree解析XML会引发TypeError

时间:2018-09-28 18:40:14

标签: python xml-parsing python-3.6 xml.etree

我正在编写一段代码,该代码从一堆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 :(得分:1)

您在代码中为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

为其中之一使用不同的变量名。