如何用Python批量处理文件夹XML文件,删除指定标签及内容
Python批量清理XML文件实现方案
前置说明
仅使用Python标准库,无需额外安装第三方依赖,支持单文件5万行以上的大体积XML处理。
完整代码
import os import glob import xml.etree.ElementTree as ET def process_xml(file_path, output_dir=None): # 解析XML文件 tree = ET.parse(file_path) root = tree.getroot() # 找到ALL_INSTANCES节点 all_instances = root.find('ALL_INSTANCES') if all_instances is None: print(f"文件{file_path}未找到ALL_INSTANCES节点,跳过处理") return # 删除包含<code>Start</code>的instance节点 for instance in all_instances.findall('instance'): code_elem = instance.find('code') if code_elem is not None and code_elem.text.strip() == 'Start': all_instances.remove(instance) # 生成处理后的文件结构 new_root = ET.Element('ALL_INSTANCES') new_root.extend(all_instances) new_tree = ET.ElementTree(new_root) # 确定输出路径 if output_dir is None: # 默认覆盖原文件,建议测试阶段指定output_dir备份原文件 output_path = file_path else: os.makedirs(output_dir, exist_ok=True) output_path = os.path.join(output_dir, os.path.basename(file_path)) # 写入文件,保留utf-8编码 with open(output_path, 'wb') as f: new_tree.write(f, encoding='utf-8', xml_declaration=True) print(f"文件{file_path}处理完成,已保存至{output_path}") if __name__ == "__main__": # 此处修改为你的XML文件所在文件夹路径 XML_FOLDER = "/path/to/your/xml/folder" # 此处修改为输出文件夹路径,设为None则直接覆盖原文件 OUTPUT_FOLDER = "/path/to/your/output/folder" # 遍历文件夹下所有xml文件 xml_files = glob.glob(os.path.join(XML_FOLDER, "*.xml")) for xml_file in xml_files: process_xml(xml_file, OUTPUT_FOLDER)
使用说明
- 修改代码中
XML_FOLDER变量为你存放XML文件的文件夹绝对路径 - 修改
OUTPUT_FOLDER变量为处理后文件的保存路径,若设为None会直接覆盖原文件,建议测试阶段先指定单独的输出目录避免原文件损坏 - 直接运行脚本即可批量处理所有XML文件
提示:如果需要输出的XML有格式化缩进,可在写入文件前添加一行代码:
ET.indent(new_root, space=" ")(仅支持Python3.9及以上版本)
实现逻辑对应需求
- 仅保留
ALL_INSTANCES节点作为最终输出的根节点,自动删除该标签前后的所有内容 - 遍历所有
instance节点,只要子节点code的内容为Start就直接删除该instance - 自动遍历指定目录下所有后缀为
.xml的文件,批量执行处理逻辑
内容的提问来源于stack exchange,提问作者JayRSP
相关产品推荐
相关产品推荐

