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
相关产品推荐
相关产品推荐

