用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