在 python 中使用 xml.etree 解析 XML 抛出 TypeError

Parsing XML using xml.etree in python throws TypeError

我正在编写一段代码,从一堆 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() 那么一切都会重新开始工作。我完全不知道发生了什么。

您在代码中为 2 个不同的变量使用了相同的名称 (root)(用于遍历您的路径,另一个用于获取 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

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