You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python文件迁移代码中用ElementTree查找指定XML元素并控制迁移

解决方案代码
import os
import glob
import shutil
import xml.etree.ElementTree as ET

def remove_ext(list_of_pathnames):
    """移除每个文件名的扩展名"""
    return [os.path.splitext(filename)[0] for filename in list_of_pathnames]

# 目标目录配置
target_dir = "D:\\TomProject\\"
new_dir = os.path.join(target_dir, "Done")
# 创建目标文件夹,已存在则不报错
os.makedirs(new_dir, exist_ok=True)

# 获取目标目录下的所有对应文件
list_of_jpegs = glob.glob(os.path.join(target_dir, '*.jpeg'))
list_of_xmls = glob.glob(os.path.join(target_dir, '*.xml'))
list_of_txts = glob.glob(os.path.join(target_dir, '*.txt'))

# 生成无扩展名的文件名映射(方便快速查找)
jpeg_map = {os.path.splitext(os.path.basename(p))[0]: p for p in list_of_jpegs}
txt_map = {os.path.splitext(os.path.basename(p))[0]: p for p in list_of_txts}

# 遍历所有XML文件,检查目标元素
for xml_path in list_of_xmls:
    # 获取无扩展名的文件名(用于匹配jpeg和txt)
    file_base = os.path.splitext(os.path.basename(xml_path))[0]
    
    try:
        # 解析XML文件
        tree = ET.parse(xml_path)
        root = tree.getroot()
        
        # 替换成你要检查的特定元素路径,示例:检查是否存在名为"target_element"的直接子元素
        # 若需嵌套查找可改为root.find(".//嵌套元素/子元素")
        target_element = root.find("target_element")
        
        if target_element is not None:
            # 检查对应jpeg和txt是否存在
            if file_base in jpeg_map and file_base in txt_map:
                print(f"移动文件组: {file_base}")
                # 移动三个文件
                shutil.move(jpeg_map[file_base], new_dir)
                shutil.move(xml_path, new_dir)
                shutil.move(txt_map[file_base], new_dir)
    except ET.ParseError:
        print(f"XML文件解析失败: {xml_path}")
        continue
关键改动说明
  • 新增XML元素检查逻辑:使用xml.etree.ElementTree解析XML文件,通过find()方法判断目标元素是否存在,可根据实际需求修改元素路径(比如嵌套元素的查找语法)
  • 优化文件夹创建:用os.makedirs(..., exist_ok=True)替代os.mkdir(),避免重复运行时因文件夹已存在抛出异常
  • 调整遍历逻辑:以XML文件为核心遍历,先验证元素条件,再匹配对应的jpeg和txt文件,逻辑更清晰
  • 文件名映射优化:用字典存储文件名与路径的映射,比原代码的列表查找效率更高
  • 异常处理:添加XML解析异常捕获,避免单个损坏的XML文件中断整个程序运行

内容的提问来源于stack exchange,提问作者tom meskin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:46:05