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

按文件名年份创建文件夹并归类图片的技术问询

按文件名中的年份归类图片到对应文件夹

需求描述

我有大量图片存储在文件夹中,文件名遵循固定格式,后缀仅为.jpg或.jpeg,示例如下:

IMG-20211127-WA0027.jpg
IMG-20211127-WA0028.jpeg
IMG-20211127-WA0029.jpg

希望根据文件名中的年份创建对应文件夹,并将图片移动至对应年份文件夹中。尝试修改教程代码但未达到预期效果,现有代码如下:

from distutils import extension
import os 
import shutil

path = "D:\\WhatsApp Images"
files = os.listdir(path)
year = os.path.getmtime(path) 

for file in files:
    filename, extension = os.path.splitext(file)
    extension = extension[1:]

    if os.path.exists(path+'/'+extension):
        shutil.move(path+'/'+file, path+'/'+extension+'/'+file)
    
    else:
        os.makedirs(path+'/'+extension)
        shutil.move(path+'/'+file,path+'/'+extension+'/'+file)

解决方案

你的现有代码逻辑是按文件后缀分类,和按年份归类的需求完全不符,以下是调整后的实现:

关键修改点

  • 从固定格式的文件名中提取年份字段
  • 以年份为依据创建目标文件夹,而非文件后缀
  • 跳过非图片文件及已生成的年份文件夹,避免无效操作

完整代码

import os
import shutil

path = "D:\\WhatsApp Images"
files = os.listdir(path)

for file in files:
    # 跳过文件夹,仅处理文件
    file_path = os.path.join(path, file)
    if os.path.isdir(file_path):
        continue
    
    # 提取文件后缀,仅处理jpg/jpeg格式
    filename, extension = os.path.splitext(file)
    if extension.lower() not in ['.jpg', '.jpeg']:
        continue
    
    # 从文件名中提取年份:按'-'分割后取第2段的前4位
    try:
        year = filename.split('-')[1][:4]
    except IndexError:
        # 文件名不符合格式时直接跳过
        continue
    
    # 拼接年份文件夹路径
    year_folder = os.path.join(path, year)
    
    # 文件夹不存在则创建
    if not os.path.exists(year_folder):
        os.makedirs(year_folder)
    
    # 移动文件到对应年份文件夹
    shutil.move(file_path, os.path.join(year_folder, file))

代码说明

  1. 跳过文件夹:遍历过程中先判断当前对象是否为文件夹,避免把已创建的年份文件夹当作文件处理
  2. 过滤图片格式:只处理.jpg和.jpeg后缀的文件,其他类型文件直接跳过
  3. 提取年份:利用字符串分割split('-')将文件名拆分为['IMG', 'YYYYMMDD', 'WAXXXX'],取第2段的前4位即为年份
  4. 路径拼接优化:使用os.path.join拼接路径,避免手动拼接字符串导致的跨系统路径分隔符问题
  5. 容错处理:增加try-except捕获文件名格式异常,避免因个别不符合格式的文件导致程序中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:37:14