如何统计多个XML文件中entry元素数量并解决Python解析XML报错问题
问题解决方法
报错原因
你遇到的报错核心原因是路径拼接缺失:
os.walk()遍历目录时返回的第一个值base是当前遍历到的目录的绝对/相对路径,第二个dirs是该目录下的子目录列表,第三个files是该目录下的纯文件名列表,不包含前置路径- 你直接把纯文件名
Files传给ET.parse(),程序会从你运行Python脚本的当前工作目录查找文件,而非XML实际存储的myOutput下的对应子目录,因此找不到文件抛出异常
其他隐藏问题
你当前的代码还有两个逻辑问题:
count变量每次遍历XML时都会被覆盖,最终打印的count只会是最后一个XML文件里的<entry>数量,不会累加所有文件的总数量totalDirOut、totalFilesOut、count三个变量使用前没有初始化,运行会报变量未定义错误
修正后的完整代码
import os import xml.etree.ElementTree as ET # 初始化变量 totalDirOut = 0 totalFilesOut = 0 total_entry_count = 0 myOutput = "替换为你的实际输出目录路径" for base, dirs, files in os.walk(myOutput): # 统计目录数 for directories in dirs: totalDirOut += 1 # 统计文件数+entry数 for file_name in files: totalFilesOut += 1 if file_name.endswith('.xml'): # 拼接完整的文件路径,核心修复点 full_file_path = os.path.join(base, file_name) doc = ET.parse(full_file_path) root = doc.getroot() # 累加entry数量,避免覆盖 total_entry_count += len(root.findall(".//entry")) print('Total number of files processed', totalFilesOut) print('Total Number of directories created', totalDirOut) print('Total:', (totalDirOut + totalFilesOut)) print('Total entry count:', total_entry_count)
修复说明
- 核心修复:使用
os.path.join(base, file_name)拼接出XML文件的完整路径,保证ET能正确找到文件 - 逻辑优化:新增
total_entry_count变量累加所有XML的<entry>总数,避免值被覆盖 - 补充了变量初始化逻辑,避免运行时报未定义错误
内容的提问来源于stack exchange,提问作者Pelide
相关产品推荐
相关产品推荐

