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

Python按文件名归类照片至对应文件夹报错(FileNotFoundError)

解决照片归类脚本的FileNotFoundError问题

咱们先拆解下你的代码为什么会抛出FileNotFoundError,核心是两个路径相关的错误:

问题1:源文件路径指向错误

你通过os.listdir("photos_to_sort")拿到的是photos_to_sort子目录里的文件名,但在执行shutil.copy时,却把文件名直接拼到了项目根目录下——这些文件明明在photos_to_sort里,程序自然找不到源文件。

问题2:目标文件夹创建位置错误

你执行os.mkdir(folderName)时,是在项目根目录(PhotoSort)下创建日期文件夹,而不是要求的sorted子目录里。后续复制文件时,程序会去sorted目录找对应日期文件夹,找不到就触发了报错。


修正后的完整代码

我调整了路径逻辑,还做了一些实用性优化,比如自动创建缺失的目录、跳过非文件项:

import os
import shutil

# 设定项目根目录并切换到该目录
project_root = "C:\\Users\\User\\Projects\\PhotoSort"
os.chdir(project_root)

# 定义源目录和目标根目录
source_dir = "photos_to_sort"
target_root = "sorted"

# 确保目标根目录存在(不存在则自动创建)
os.makedirs(target_root, exist_ok=True)

for filename in os.listdir(source_dir):
    # 跳过photos_to_sort里的子目录(如果有的话)
    source_file_path = os.path.join(source_dir, filename)
    if not os.path.isfile(source_file_path):
        continue
    
    # 提取日期作为文件夹名(匹配IMG_20200101_xxxx.jpg的格式)
    folder_name = filename[4:12]
    # 拼接目标文件夹的完整路径
    target_folder = os.path.join(target_root, folder_name)
    
    # 创建目标文件夹(已存在则跳过)
    os.makedirs(target_folder, exist_ok=True)
    
    # 拼接目标文件路径并执行复制
    target_file_path = os.path.join(target_folder, filename)
    shutil.copy(source_file_path, target_file_path)

关键优化说明

  • 路径准确性:用os.path.join统一拼接路径,既保证跨平台兼容性,也明确了源文件和目标文件夹的正确位置。
  • 自动补全目录:os.makedirs(..., exist_ok=True)可以一次性创建多层目录(比如sorted不存在也会自动生成),还能避免目录已存在时的报错。
  • 过滤非文件:增加了文件判断逻辑,避免误处理photos_to_sort里的子目录。
  • 降低维护成本:把根目录、源目录、目标目录单独定义,后续修改路径只需改一处。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:12:45