我在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
非常感谢您!
答案 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()