Python如何筛选XML中符合文件大小条件的节点生成新XML文件
Python实现XML按关联文件大小筛选节点方案
全程使用Python标准库实现,无需安装额外第三方依赖,核心用到xml.etree.ElementTree做XML解析处理、os模块获取文件大小。
核心逻辑
- 读取解析
original.xml文件,拿到XML根节点 - 遍历所有
<DATA>子节点,提取节点文本存储的文件路径 - 计算对应文件的字节大小,仅保留文件大小大于10MB(即101024*1024 = 10485760字节)*的节点,删除不符合条件的节点
- 将处理完成的XML结构格式化后写入新文件
完整实现代码
import xml.etree.ElementTree as ET import os # 基础配置 ORIGIN_XML_PATH = "original.xml" OUTPUT_XML_PATH = "filtered.xml" SIZE_THRESHOLD = 10 * 1024 * 1024 # 10MB对应的字节数 # 加载解析原始XML tree = ET.parse(ORIGIN_XML_PATH) root = tree.getroot() # 遍历节点时用list做一层拷贝,避免遍历过程中删节点导致的漏遍历问题 for data_node in list(root.iter("DATA")): file_path = data_node.text.strip() try: file_size = os.path.getsize(file_path) # 文件大小不满足阈值就移除对应节点 if file_size <= SIZE_THRESHOLD: root.remove(data_node) except OSError: # 文件不存在、无读权限等访问异常场景,默认移除对应节点,可按需调整为保留/打印日志 root.remove(data_node) # 自动格式化XML缩进(仅Python 3.9及以上版本支持) ET.indent(tree, space=" ", level=0) # 写入新XML文件,保持UTF-8编码和标准XML声明头 tree.write( OUTPUT_XML_PATH, encoding="UTF-8", xml_declaration=True )
注意事项
- 代码中10MB按操作系统通用的二进制规则换算(1MB=1024KB),如果需要按十进制规则(1MB=1000KB)计算,直接修改
SIZE_THRESHOLD的数值即可 - 若使用Python3.9以下版本,删除
ET.indent相关代码也可正常生成符合语义的XML文件,仅输出内容无换行缩进,不影响文件正常使用 - 异常分支的处理逻辑可根据实际业务需求调整,比如访问失败时保留节点、打印错误路径等
内容的提问来源于stack exchange,提问作者Abhishek N
相关产品推荐
相关产品推荐

