使用ElementTree从文件夹中读取多个xml文件

时间:2019-02-24 20:32:35

标签: python xml

我在Python编码方面是一个新手,有一个问题我已经尝试解决了几个小时:

我有1600多个xml文件(0000.xml,0001.xml等)需要解析才能进行文本挖掘项目。
但是,当我有以下代码时,发生了错误:

from os import listdir, path 
import xml.etree.ElementTree as ET

mypath = '../project/content' 
files = [f for f in listdir(mypath) if f.endswith('.xml')]

for file in files:    
    tree = ET.parse("../project/content/"+file)
    root = tree.getroot()

错误消息如下:

Traceback (most recent call last):

  File "/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2910, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)

  File "<ipython-input-13-cdc3ee6c3989>", line 6, in <module>
    tree = ET.parse("../project/content/"+file)

  File "/anaconda3/lib/python3.6/xml/etree/ElementTree.py", line 1196, in parse
    tree.parse(source, parser)

  File "/anaconda3/lib/python3.6/xml/etree/ElementTree.py", line 597, in parse
    self._root = parser._parse_whole(source)

  File "<string>", line unknown ParseError: no element found: line 1, column 0

我在哪里犯错?

此外,我只想从每个xml文件的一个元素中提取文本,仅将这一行附加到代码是否足够?而且,如何将每个结果保存到txt文件?

maintext = root.find("mainText").text

非常感谢您!

1 个答案:

答案 0 :(得分:0)

创建路径元素的正确方法是使用连接:

在尝试创建树之前,将打印消息添加到代码中。

您尝试解析的XML是否有效?

解决解析问题后,可以使用multiprocessing来同时解析许多文件。

from os import listdir, path
import xml.etree.ElementTree as ET

mypath = '../project/content'
files = [path.join(mypath, f) for f in listdir(mypath) if f.endswith('.xml')]

for file in files:
    print(file)
    tree = ET.parse(file)
    root = tree.getroot()