如何用Python在XML文件中查找指定字符串并移动文件至目标目录
解决XML文件内容包含指定字符串的移动问题
你的代码目前只是将所有XML文件移动到目标目录,但没有检查文件内容是否包含'drone'字符串,这是核心问题。另外代码存在缩进错误,会导致运行报错。以下是修正后的实现方案:
修正后的完整代码
import os import shutil print("移动前源目录与目标目录内容:") source = r"D:\TomProject\Images" destination = r"D:\TomProject\txt" # 确保目标目录存在,避免移动时出错 os.makedirs(destination, exist_ok=True) # 打印源目录结构 for root, dirs, files in os.walk(source): print(f"当前路径: {root}") print(f"子目录: {dirs}") print(f"文件: {files}\n") # 打印目标目录初始内容 print(f"目标目录初始内容: {os.listdir(destination)}\n") # 遍历源目录,筛选符合条件的XML文件 for root, dirs, files in os.walk(source): for file in files: # 筛选XML后缀文件(兼容大小写后缀) if file.lower().endswith(".xml"): file_path = os.path.join(root, file) # 读取文件内容,检查是否包含'drone' try: with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 若要忽略大小写匹配,可改为 if 'drone' in content.lower() if 'drone' in content: # 移动文件到目标目录 shutil.move(file_path, os.path.join(destination, file)) print(f"已移动文件: {file_path}") except Exception as e: print(f"处理文件 {file_path} 时出错: {str(e)}") print("\n移动后目标目录内容:") print(os.listdir(destination))
关键改进点
- 增加内容检查逻辑:打开每个XML文件,读取内容并判断是否包含'drone'字符串,仅移动符合条件的文件
- 修复缩进错误:修正原代码中缩进不正确的语句,避免运行报错
- 添加异常处理:捕获文件读取或移动时的异常,避免程序中途崩溃
- 确保目标目录存在:使用
os.makedirs确保目标目录存在,避免移动时因目录不存在报错 - 更严谨的后缀判断:使用
endswith结合lower(),避免因大小写问题漏判XML文件(如.XML后缀)
内容的提问来源于stack exchange,提问作者tom meskin
相关产品推荐
相关产品推荐

