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

如何在XML文件包含'drone'字符串时将其移动至指定目录?

实现XML文件含指定字符串时的移动操作

核心思路

  1. 遍历XML所有元素的文本内容,检测是否包含目标字符串drone
  2. 若检测到目标字符串,使用shutil.move()将文件移动到指定目录
  3. 可扩展为批量处理目录下所有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:15:40