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

使用shutil.move移动目录时出现目录丢失的问题排查

问题排查与修复

核心问题分析

1. Sorted目录创建路径错误

你的代码中Path("Sorted").mkdir(exist_ok=True)是在脚本运行的当前工作目录创建Sorted目录,而非你指定的workingDir下。这直接导致了目录“消失”的问题:
当workingDir/Sorted不存在时,shutil.move(src, dst)的行为是将源目录重命名为目标路径,而非将源移入目标目录。第一次匹配到的目录(比如123-text)会被直接重命名为workingDir/Sorted,看起来像是“消失”了;第二次匹配的目录则会被正常移入这个刚生成的Sorted目录,最终你只会看到Sorted里有第二个目录,误以为第一个丢失了。

2. 路径拼接与遍历的隐患

  • 手动用+ '/'拼接路径,在Windows系统下会导致路径错误,且容易出错
  • os.listdir返回的是字符串,无法直接判断是否为目录,可能会误处理文件
  • 循环内重复创建Sorted目录(虽有exist_ok=True,但没必要)
  • 未处理目录名不含'-'的情况,会触发IndexError

修复后的代码

import shutil
from pathlib import Path

working_dir = Path(input("Paste the path to your files: "))
target_prefixes = {'123', '345', '678', '910'}  # 集合查找效率更高

# 提前在指定工作目录下创建Sorted目录
sorted_dir = working_dir / "Sorted"
sorted_dir.mkdir(exist_ok=True)

# 遍历工作目录下的所有条目,仅处理目录
for item in working_dir.iterdir():
    if item.name == '.DS_Store' or not item.is_dir():
        continue
    
    # 仅分割第一个'-',避免目录名含多个'-'的情况
    name_parts = item.name.split("-", 1)
    if len(name_parts) < 2:
        continue
    
    prefix = name_parts[0]
    if prefix in target_prefixes:
        # 明确指定目标路径,确保将目录移入Sorted
        shutil.move(str(item), str(sorted_dir / item.name))

关键修复点说明

  1. 正确创建Sorted目录:用working_dir / "Sorted"确保目录创建在你指定的工作目录下,而非脚本运行目录
  2. 提前创建目录:避免循环内重复执行mkdir,逻辑更清晰
  3. 使用Path对象处理路径:自动适配不同系统的路径分隔符,避免手动拼接出错
  4. 增加安全判断:仅处理目录、跳过不含'-'的目录,避免异常
  5. 明确移动目标:sorted_dir / item.name确保将源目录移入Sorted,而非重命名为Sorted

内容的提问来源于stack exchange,提问作者Lew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:45:51