如何基于DataFrame列按修改日期批量重命名文件夹内文件
解决方案
核心思路
先获取目标文件夹下的所有图片文件,按修改时间从早到晚排序,再与DataFrame的new_name列按顺序匹配,最后执行重命名操作。
完整代码
import os # 目标文件夹路径 folder_path = r"E:\folder" # 1. 获取文件夹内所有.jpg格式文件的完整路径 image_files = [ os.path.join(folder_path, filename) for filename in os.listdir(folder_path) if filename.lower().endswith(".jpg") ] # 2. 按文件修改时间排序(最早修改的排在最前) sorted_files = sorted(image_files, key=lambda f: os.path.getmtime(f)) # 3. 校验文件数量与new_name列行数是否一致,避免匹配错误 if len(sorted_files) != len(df["new_name"]): raise ValueError("文件数量与DataFrame中new_name的行数不匹配,请检查!") # 4. 遍历执行重命名 for old_file_path, new_name in zip(sorted_files, df["new_name"]): # 拼接新文件路径,保留.jpg后缀 new_file_path = os.path.join(folder_path, f"{new_name}.jpg") os.rename(old_file_path, new_file_path)
原代码问题说明
- 未正确获取文件列表:原代码中
file_path未定义,os.path.basename(file_path)无法获取有效文件名; - 匹配顺序错误:没有对文件按修改时间排序,无法保证最早修改的文件对应DataFrame第一行;
- 字典键值颠倒:
dict(zip(file_name, df['new_name']))将文件名作为键、新名称作为值,遍历交换了新旧名称的位置,导致重命名逻辑错误。
内容的提问来源于stack exchange,提问作者complog
相关产品推荐
相关产品推荐

