按文件名年份创建文件夹并归类图片的技术问询
按文件名中的年份归类图片到对应文件夹
需求描述
我有大量图片存储在文件夹中,文件名遵循固定格式,后缀仅为.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))
代码说明
- 跳过文件夹:遍历过程中先判断当前对象是否为文件夹,避免把已创建的年份文件夹当作文件处理
- 过滤图片格式:只处理
.jpg和.jpeg后缀的文件,其他类型文件直接跳过 - 提取年份:利用字符串分割
split('-')将文件名拆分为['IMG', 'YYYYMMDD', 'WAXXXX'],取第2段的前4位即为年份 - 路径拼接优化:使用
os.path.join拼接路径,避免手动拼接字符串导致的跨系统路径分隔符问题 - 容错处理:增加
try-except捕获文件名格式异常,避免因个别不符合格式的文件导致程序中断
内容的提问来源于stack exchange,提问作者Raphael Borges
相关产品推荐
相关产品推荐

