批量添加文件名前缀或后缀,并添加流水号,位数不中以0填充

文章介绍了一个使用Python实现的批量文件重命名程序,该程序能根据文件数量动态在文件名末尾添加0填充的序号,以保持位数对齐。程序首先计算目录中文件的数量,然后为每个文件添加相应数量的0作为序号,实现了灵活的文件索引格式化。
摘要由CSDN通过智能技术生成

用Python编一个批量改名的程序,文件名末尾自动加序号。但序号有如下要求:
1,序号左边必须用0填充
2,填充多少个0,由目标目录中的文件数量决定。例如:
如果目录中有<9个文件,那么不填充,如:1 3 9;
如果目录中有<99个文件,那么最多填充一个0,如:01 09 67 99;
如果目录中有<999个文件,那么最多填充两个0,如:001 098 126 999;
如果目录中有<9999个文件,那么最多填充三个0,如:0001 0098 0126 0999 1289 9876;
类推,至少到万位。
3,具体填充多少个0,由该文件的索引号决定,例如:文件目录.index(文件)=256,且目标目录中有8620个文件,则填充为:0256

我的思路:

1,测出目录下文件的总数量,并算出数量的位数
2,提取当前文件的索引号,并测出其位数
3,从索引号的位数开始,循环到文件总数量的位数,每循环一轮加一个0

更好的办法:强烈推荐CQ.abc的log10方法

我的办法,完整的代码如下(不好意思,我是初学者,所以加了很多注释以供学习,还望海涵):

'''批量添加文件名前缀或后缀'''
# 导入日志模块
import logging
import os

logging.disable(logging.CRITICAL)
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s-%(levelname)s:%(message)s')

# 定义函数
def 列出目录文件(路径):
    import os
    文件目录 = os.listdir(路径)
    # logging.debug(f'目录“{路径}”下有以下文件:\n%s' % (文件目录))
    print(f'目录“{路径}”下有以下文件:\n{文件目录}')
    return 文件目录

def 重命名(路径, 前缀='', 后缀=''):
    import os
    #import re
    #re模块提供正则表达式
    文件目录 = os.listdir(路径)
    #获取目录里的文件列表,注意:不包含路径
    原工作目录 = os.getcwd()
    #获取当前工作目录
    logging.debug(f'原工作目录:%s' % (原工作目录))
    os.chdir(路径)
    #改变工作目录到目标目录中,可免去繁琐的文件路径
    现工作目录 = os.getcwd()
    logging.debug(f'现工作目录:%s' % (现工作目录))
    # 更改工作目录,以免改名时老要带路径
    计数=0
    for 原文件 in 文件目录:
        文件名=os.path.splitext(原文件)
        #os.path.splitext()方法将括号中的文件名以“.”为界限
        # 分割成主文件名和扩展名(包含".")并返回一个列表,
        #列表的[0]索引元素为主文件名,[1]索引元素为扩展名
        主文件名=文件名[0]
        logging.debug(f'主文件名:%s' % (文件名[0]))
        扩展名=文件名[1]
        logging.debug(f'扩展名:%s' % (文件名[1]))
        os.renames(原文件,(前缀+主文件名+后缀+扩展名))
        #os.renames(原文件名,新文件名)用于改文件名
        计数 +=1
    os.chdir(原工作目录)
    #将工作目录改回原来的
    print (f'共{计数}个文件完成重命名')

def 重命名流水(路径,前缀='',后缀='',流水=''):
    import os
    文件目录 = os.listdir(路径)
    原工作目录 = os.getcwd()
    os.chdir(路径)
    现工作目录 = os.getcwd()
    计数 = 0
    for 原文件 in 文件目录:
        填充 = ''
        文件名 = os.path.splitext(原文件)
        主文件名 = 文件名[0]
        logging.debug(f'主文件名:%s' % (文件名[0]))
        扩展名 = 文件名[1]
        位数=len(str(len(文件目录)))
        #算出文件目录中文件数量的位数(个位,十位,百位,千位…)
        序号=str(文件目录.index(原文件)+1)
        #以“原文件”在“文件目录”列表中的索引号+1为每个文件的序号
        logging.debug(序号)
        for 变量 in range(len(str(序号)), 位数):
            #从“文件序号”的“位数”开始循环,循环到文件目录中“文件
            # 数量”的“位数”,每循环一轮,加一个0
            #例如:文件序号是12,那么它的“位数”就是2;而文件目录中
            #有1654个文件,则“文件数量”的“位数”就是4。每循环一轮
            #加个0的话,则会循环2轮,既加两个0:0012
            填充 = 填充 + str(0)
        logging.debug(填充)
        if 流水=='后':
            os.renames(原文件, (前缀 + 主文件名 + 后缀 +'-'+ 填充+序号+ 扩展名))
        elif 流水=='前':
            os.renames(原文件, (前缀+ 填充 +序号+'-'+ 主文件名 + 后缀  + 扩展名))
        计数 += 1
    os.chdir(原工作目录)
    print(f'共{计数}个文件完成重命名')

# 执行
路径 = 'G:\\Temp\\测试'
#重命名(路径, '图片', '-20230308')
重命名流水(路径,前缀='图片',后缀='编号',流水='后')
列出目录文件(路径)

运行结果:

共176个文件完成重命名
目录“G:\Temp\测试”下有以下文件:
['图片Image 001编号-001.png', '图片Image 002编号-002.png', '图片Image 003编号-003.png', '图片Image 004编号-004.png', '图片Image 005编号-005.png'……
进程已结束,退出代码0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

将出东方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值