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

Python实现将含drone元素的XML文件移动至目标目录的问题求助

解决XML文件移动问题

你的代码存在几个关键问题导致无法实现需求,以下是修正后的代码及问题说明:

原代码核心问题

  • 移动目标完全错误:你写的shutil.move("D:\\TomProject\\Images", "D:\\TomProject\\Done")是把整个Images文件夹移到Done里,既搞反了方向,也没有指定要移动的具体XML文件
  • 重复操作风险:如果一个XML里有多个object标签匹配Drone,会重复执行移动命令,导致文件已不存在的报错
  • 冗余代码:定义了name = 'drone'但从未实际使用

修正后的代码

import os
import shutil
from xml.etree import ElementTree as ET

# 源目录(存放待处理XML的文件夹)
source_path = "D:\\TomProject\\Done"
# 目标目录(要移动到的文件夹)
target_path = "D:\\TomProject\\Images"

# 确保目标目录存在,不存在则自动创建
if not os.path.exists(target_path):
    os.makedirs(target_path)

for filename in os.listdir(source_path):
    # 只处理XML格式文件
    if not filename.endswith('.xml'):
        continue
    
    full_file_path = os.path.join(source_path, filename)
    tree = ET.parse(full_file_path)
    root = tree.getroot()
    
    # 标记当前文件是否需要移动
    need_move = False
    for obj in root.findall('object'):
        name_tag = obj.find('name')
        # 防止XML中无name标签导致报错
        if name_tag is not None and name_tag.text.strip() == 'Drone':
            need_move = True
            break  # 找到匹配项就跳出循环,避免重复检查
    
    if need_move:
        target_file_path = os.path.join(target_path, filename)
        shutil.move(full_file_path, target_file_path)
        print(f"已移动文件: {filename}")

关键修改说明

  1. 路径拆分定义:把源目录和目标目录分开设置,便于后续维护修改
  2. 目标目录预创建:添加os.makedirs确保目标文件夹存在,避免移动时因目录不存在报错
  3. 标记式判断:用need_move变量标记是否需要移动,避免同一文件多次触发移动操作
  4. 空值防护:增加name_tag is not None的判断,防止XML结构不规范导致的属性错误
  5. 正确指定移动对象:使用单个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.12 07:40:32