Python批量重命名文件夹图片时顺序混乱问题排查
问题原因与解决方案
你的代码确实存在问题,核心原因是os.listdir()返回的文件名是字符串字典序排序,而非你预期的数字顺序。
比如原文件是0.jpg、1.jpg...10.jpg,字符串字典序中"10.jpg"会排在"1.jpg"之后、"2.jpg"之前——因为字符串比较是逐字符进行的,"10"的第一个字符"1"和"1"一致,第二个字符"0"的ASCII码比"2"小,所以排序时会靠前。直接遍历这个无序(对数字而言)的列表,自然会出现改完第1张就跳到第10张的情况。
修正后的代码
import os folder = "你的目标文件夹路径/" start_count = 0 # 这里设置你想要的起始数字 # 筛选出所有jpg文件,并按原始文件名中的数字排序 file_list = [f for f in os.listdir(folder) if f.endswith(".jpg")] # 提取文件名中的数字,按数字大小排序(适用于原文件名是"数字.jpg"的格式) file_list.sort(key=lambda x: int(x.split('.')[0])) count = start_count for file_name in file_list: # 用os.path.join拼接路径,适配不同系统的路径分隔符,避免拼接错误 source = os.path.join(folder, file_name) destination = os.path.join(folder, f"{count}.jpg") os.rename(source, destination) count += 1
关键调整说明
- 正确排序:先提取每个文件名中的数字,按数字大小对文件列表排序,确保遍历顺序是你预期的0→1→2→...→20
- 安全路径拼接:用
os.path.join替代直接字符串相加,避免因操作系统路径分隔符(Windows是\,Linux/macOS是/)不同导致的路径错误 - 文件筛选:通过
endswith(".jpg")过滤非目标文件,避免误处理文件夹中的其他类型文件
如果你的原始文件名不是纯数字格式(比如pic_0.jpg),只需要调整排序逻辑中的数字提取部分即可,例如:
# 针对"pic_数字.jpg"格式的文件名提取数字 file_list.sort(key=lambda x: int(x.split('_')[1].split('.')[0]))
内容的提问来源于stack exchange,提问作者user16778385
相关产品推荐
相关产品推荐

