如何在XML文件包含'drone'字符串时将其移动至指定目录?
实现XML文件含指定字符串时的移动操作
核心思路
- 遍历XML所有元素的文本内容,检测是否包含目标字符串
drone - 若检测到目标字符串,使用
shutil.move()将文件移动到指定目录 - 可扩展为批量处理目录下所有XML文件
单个XML文件处理示例
import xml.etree.ElementTree as ET import shutil import os # 配置路径 source_file = 'D:\\TomProject\\Images\\132907650508092287_10.xml' target_dir = 'D:\\TomProject\\Drone_XMLs' # 目标目录 # 确保目标目录存在,不存在则创建 os.makedirs(target_dir, exist_ok=True) # 解析XML并检测目标字符串 has_drone = False tree = ET.parse(source_file) for elem in tree.iter(): # 避免elem.text为None时报错,先判断非空再检查 if elem.text and 'drone' in elem.text.lower(): # lower()用于不区分大小写检测,可根据需求移除 has_drone = True break # 找到后直接跳出循环,提升效率 # 满足条件则移动文件 if has_drone: shutil.move(source_file, target_dir) print(f"已移动文件: {source_file}") else: print(f"未检测到'drone',不移动文件: {source_file}")
批量处理目录下所有XML文件
如果需要处理某个目录下的所有XML文件,可扩展如下:
import xml.etree.ElementTree as ET import shutil import os import glob # 配置路径 source_dir = 'D:\\TomProject\\Images' target_dir = 'D:\\TomProject\\Drone_XMLs' os.makedirs(target_dir, exist_ok=True) # 获取目录下所有XML文件 xml_files = glob.glob(os.path.join(source_dir, '*.xml')) for file_path in xml_files: has_drone = False try: tree = ET.parse(file_path) for elem in tree.iter(): if elem.text and 'drone' in elem.text.lower(): has_drone = True break except ET.ParseError: print(f"XML解析错误,跳过文件: {file_path}") continue if has_drone: shutil.move(file_path, target_dir) print(f"已移动文件: {file_path}")
关键注意点
- 空文本处理:必须先判断
elem.text不为None,否则直接调用in会引发TypeError - 大小写敏感:如果需要不区分大小写检测,使用
elem.text.lower()和'drone'对比;若需严格匹配,移除.lower()即可 - 目录创建:使用
os.makedirs(..., exist_ok=True)确保目标目录存在,避免移动时因目录不存在报错 - 异常处理:批量处理时建议添加XML解析异常捕获,避免单个文件解析错误导致整个脚本中断
内容的提问来源于stack exchange,提问作者tom meskin
相关产品推荐
相关产品推荐

