为文件名添加前导零:优化批量随机编号重命名脚本
为随机编号添加前导零以实现文件正确排序
需求说明
你有一个包含千余文件且持续更新的文件夹,当前使用Python脚本为文件名添加随机整数前缀,但需要为编号添加前导零,确保文件能按编号正确排序(例如0001_file_a、0010_file_b)。
原脚本问题
原脚本生成无格式的整数编号,排序时会出现10_file排在2_file之前的问题;同时每次循环重复调用os.listdir()效率较低,且未处理已添加前缀的文件(持续更新场景下会重复编号)。
修改后的脚本
import os import random os.chdir('c:/test') # 提前获取所有文件名,避免循环中目录内容变化引发的问题 filenames = os.listdir() total_files = len(filenames) # 动态计算编号需要的位数,适配当前文件总数(千余文件对应4位) digit_length = len(str(total_files)) used_random = [] for filename in filenames: # 跳过已带数字前缀的文件,防止重复编号 if '_' in filename and filename.split('_')[0].isdigit(): continue # 生成不重复的随机编号 n = random.randint(1, total_files) while n in used_random: n = random.randint(1, total_files) used_random.append(n) # 格式化编号,自动补前导零 new_filename = f"{n:0{digit_length}d}_{filename}" os.rename(filename, new_filename)
关键修改点
- 动态适配编号位数:通过
len(str(total_files))获取文件总数的位数,确保前缀长度足够覆盖所有文件(比如1200个文件自动用4位,编号范围0001-1200)。 - 前导零格式化:使用
f"{n:0{digit_length}d}"实现数字补零,0{digit_length}d表示将数字格式化为指定长度的字符串,不足部分用前导零填充。 - 避免重复编号:添加判断逻辑,跳过已包含数字下划线前缀的文件,适配持续更新的文件夹场景。
- 优化文件列表获取:一次性获取所有文件名,避免循环中多次调用
os.listdir()的效率问题和潜在错误。
示例效果
重命名前:
file_a file_b file_c
重命名后(假设有100个文件,位数为3):
001_file_a 010_file_b 100_file_c
内容的提问来源于stack exchange,提问作者shinjidf
相关产品推荐
相关产品推荐

