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

使用shutil移动带扩展名文件异常:仅创建文件夹未移动文件求助

问题排查与修复方案

你的代码存在几个关键问题,导致文件未被移动,以下是具体分析和修复:

1. 缩进错误(Python语法核心问题)

Python依赖缩进区分代码块,你的代码多处缩进违规:

  • remove_ext函数内的return语句未缩进,函数逻辑无法正常执行
  • path = os.getcwd()前有多余空格,属于语法错误
  • for循环和if判断后的shutil.move语句未缩进,这部分代码不会被循环触发执行

2. 文件扩展名不匹配

你用glob.glob(path+"\\*.jpeg")查找.jpeg后缀的图片,但移动时拼接的是.jpg扩展名,导致找不到对应文件,自然无法完成移动操作。

3. 目标文件夹创建的潜在问题

直接使用os.mkdir("image_with_xml")会在文件夹已存在时抛出异常,应该改用支持创建多级目录且忽略已存在情况的os.makedirs。

4. 路径拼接不规范

手动用+拼接路径容易出现分隔符错误,应该始终使用os.path.join处理路径,保证跨系统兼容性。

修复后的完整代码

import os
import glob
import shutil

def remove_ext(list_of_pathnames):
    return [os.path.splitext(filename)[0] for filename in list_of_pathnames]

# 直接指定目标目录,避免切换工作目录带来的路径混淆
target_dir = "D:\\TomProject\\Images\\"
newpath = os.path.join(target_dir, "image_with_xml")
# 安全创建目标文件夹,已存在则不报错
os.makedirs(newpath, exist_ok=True)

# 用os.path.join拼接路径,查找目标目录下的文件
list_of_jpegs = glob.glob(os.path.join(target_dir, "*.jpeg"))
list_of_xmls = glob.glob(os.path.join(target_dir, "*.xml"))

jpegs_without_extension = remove_ext(list_of_jpegs)
xmls_without_extension = remove_ext(list_of_xmls)

for filename in jpegs_without_extension:
    if filename in xmls_without_extension:
        # 保持扩展名一致,使用.jpeg
        shutil.move(filename + '.jpeg', newpath)
        shutil.move(filename + '.xml', newpath)

额外说明:如果你的图片实际是.jpg后缀,只需把glob里的*.jpeg改成*.jpg即可。

内容的提问来源于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 15:30:58