在 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
其中之一使用不同的变量名。
我正在编写一段代码,从一堆 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
其中之一使用不同的变量名。