如何用Python批量移除XML文件中的多余根层级<object>
批量移除XML中的
<object>层级的Python实现 实现思路
借助Python标准库xml.etree.ElementTree解析XML文件,遍历目标文件夹下所有XML文件,将<object>节点的子节点直接迁移到<objects>节点下,删除原<object>节点后,重新保存修改后的文件。
完整代码
import os import xml.etree.ElementTree as ET def indent(elem, level=0): # 给XML元素添加缩进,保证输出格式美观 i = "\n" + level*" " if len(elem): if not elem.text or not elem.text.strip(): elem.text = i + " " if not elem.tail or not elem.tail.strip(): elem.tail = i for elem in elem: indent(elem, level+1) if not elem.tail or not elem.tail.strip(): elem.tail = i else: if level and (not elem.tail or not elem.tail.strip()): elem.tail = i def process_xml_file(file_path): try: # 解析XML文件 tree = ET.parse(file_path) root = tree.getroot() # 获取<objects>根节点 # 找到所有<object>节点(默认每个文件仅一个) object_nodes = root.findall("object") for obj_node in object_nodes: # 将<object>的子节点全部移到<objects>节点下 for child in list(obj_node): root.append(child) # 删除原<object>节点 root.remove(obj_node) # 给XML添加缩进,保证格式可读性 indent(root) # 覆盖原文件保存(如需备份,可修改保存路径,比如加后缀"_modified") tree.write(file_path, encoding="utf-8", xml_declaration=True) print(f"处理完成: {file_path}") except Exception as e: print(f"处理失败 {file_path}: {str(e)}") def batch_process_xml(folder_path): # 遍历文件夹下所有XML后缀的文件 for filename in os.listdir(folder_path): if filename.lower().endswith(".xml"): file_path = os.path.join(folder_path, filename) process_xml_file(file_path) if __name__ == "__main__": # 修改为你的XML文件所在文件夹路径 target_folder = "path/to/your/xml/folder" batch_process_xml(target_folder)
使用说明
- 把代码里的
target_folder替换成你存放XML文件的实际路径。 - 运行代码后,所有XML文件会被直接修改;如果需要保留原文件,可修改
tree.write的路径,比如写成file_path.replace(".xml", "_modified.xml")。 indent函数用于保证输出的XML有清晰的缩进格式,避免解析后内容杂乱无章。- 若某文件解析出错,会打印错误信息,不影响其他文件的处理流程。
内容的提问来源于stack exchange,提问作者Flint_Lockwood
相关产品推荐
相关产品推荐

