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}")
关键修改说明
- 路径拆分定义:把源目录和目标目录分开设置,便于后续维护修改
- 目标目录预创建:添加
os.makedirs确保目标文件夹存在,避免移动时因目录不存在报错 - 标记式判断:用
need_move变量标记是否需要移动,避免同一文件多次触发移动操作 - 空值防护:增加
name_tag is not None的判断,防止XML结构不规范导致的属性错误 - 正确指定移动对象:使用单个XML文件的完整路径作为移动源,确保移动的是符合条件的目标文件
内容的提问来源于stack exchange,提问作者tom meskin
相关产品推荐
相关产品推荐

