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

为文件名添加前导零:优化批量随机编号重命名脚本

为随机编号添加前导零以实现文件正确排序

需求说明

你有一个包含千余文件且持续更新的文件夹,当前使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:02:21