import os
#############配置参数###############
# 功能:
# 1、 提供一个二级目录的文件夹,将该文件夹下面的多个子文件夹的名字修改为 文件夹名 + 空格 + 数字编码
# 例如 A文件夹下只有文件夹,第一个文件修改为 a 0001.文件后缀
# 2、 提供一个一级目录的文件夹,将该文件夹下的文件修改成 文件夹名 + 空格 + 数字编码
# 例如 B文件夹下只有文件,第一个文件修改为 B 0001.文件后缀
# 两者的区别只是在path输入不同
#用户配置信息
path = r"D:\cc\bbb\123\3" # 该参数是修改路径,例如D:\cc\bbb\123,提供的路径放在引号里面路径 ,不要动引号前面的r
num = 5 #填充总位数 # 该参数是数字编码总位数,如0001 num = 4,可以按照需求调整大小
a = 1 #填充的起始数 表示第一个数从 0001 前面0的个数和num有关,num=4,个位数前面就是3个0,十位数2两个.....
####### 注意 #########
# 1、每一个修改后的文件名不能在当前文件夹中存在,否则会报错,可以通过修改num避免
# 例如将A文件夹中a.png修改成A 0001.png,但是文件夹A中已经有图片叫做A 0001.png,此时会报错
# 2、如果是二级目录中,第一级只能是目录,不能有文件
# 函数正文
def rename(path,num,a):
# 获取该路径下所有文件
dirlists = os.listdir(path)
# print(os.path.join(path, dirlists[0]))
if os.path.isdir(os.path.join(path, dirlists[0])):
doubleDir(dirlists, num, a)
else:
sigleDir(path,num,a)
def sigleDir(path,num,a):
changeName(path, a, num)
def doubleDir(dirlists,zero,a):
for dirlist in dirlists:
pathname = os.path.join(path, dirlist)
changeName(pathname,a,zero)
def changeName(pathname,a,zero):
zerostr = ''
filelist = os.listdir(pathname)
a1 = a
fileName = pathname.split('\\')[-1]
for files in filelist:
# 原始路径
Olddir = os.path.join(pathname, files)
i = 0
b = len(str(a1))
while (i < (zero - b)):
zerostr = zerostr + '0'
# print(i)
i += 1
# .bmp
filetype = os.path.splitext(files)[1]
# filename = files.split('.')[0]
# 需要存储的路径 a 是需要定义修改的文件名
Newdir = os.path.join(pathname, fileName + " " + zerostr + str(a1) + filetype)
zerostr = ''
os.rename(Olddir, Newdir)
a1 += 1
if __name__ == "__main__":
rename(path,num,a)
配置文件版
args.ini
[args]
;需要修改图片的路径,文件夹是一级目录和二级目录都可以
path=E:\测试
;填充总位数
num=3
;起始点
start=1
;注意:每次修改必须按ctrl+s 保存,看一下记事本文件名上面是否*号,有表示没有保存
;请务必保证前3行 "=" 和"#"不被删除
;不能存在和修改名相同的文件
import os
# coding=utf8
import os
import argparse
import configparser
config = configparser.ConfigParser()
config.read('args.ini',encoding='utf-8')
path = config.get('args','path')
num = int(config.get('args','num'))
start = int(config.get('args','start'))
# with open("args.txt",'r',encoding='utf-8') as f:
# data = f.readlines()
#
# # print(data)
# #功能: 将A文件夹下的文件移动到B文件夹中,并且按照B中的已有的顺排序
# ###################可修改参数########################
# #导入目录
# path = data[0].split("=")[1].split('#')[0].strip() # 该参数是修改路径,例如D:\cc\bbb\123,提供的路径放在引号里面路径 ,不要动引号前面的r,路径不能以 \ 结束
# #填充总位数
# num = int(data[1].split("=")[1].split('#')[0].strip()) #填充总位数 # 该参数是数字编码总位数,如0001 num = 4,可以按照需求调整大小
# #插入点
# a = int(data[2].split("=")[1].split('#')[0].strip()) #填充的起始数 表示第一个数从 0001 前面0的个数和num有关,num=4,个位数前面就是3个0,十位数2两个.....
#############配置参数###############
# 功能:
# 1、 提供一个二级目录的文件夹,将该文件夹下面的多个子文件夹的名字修改为 文件夹名 + 空格 + 数字 # 该参数是修改路径,例如D:\cc\bbb\123,提供的路径放在引号里面路径 ,不要动引号前面的r,路径不能以 \ 结束编码
# 例如 A文件夹下只有文件夹,第一个文件修改为 a 0001.文件后缀
#
# 2、 提供一个一级目录的文件夹,将该文件夹下的文件修改成 文件夹名 + 空格 + 数字编码
# 例如 B文件夹下只有文件,第一个文件修改为 B 0001.文件后缀
# 两者的区别只是在path输入不同
#########
# 每一个修改后的文件名不能在当前文件夹中存在,否则会报错,可以通过修改num避免
# 例如将A文件夹中a.png修改成A 0001.png,但是文件夹A中已经有图片叫做A 0001.png,此时会报错
# 多级文件夹只能在最后一级文件夹存放文件
# 函数正文
def rename(path,num,a):
# 获取该路径下所有文件
dirlists = os.listdir(path)
# print(os.path.join(path, dirlists[0]))
try:
if os.path.isdir(os.path.join(path, dirlists[0])):
doubleDir(dirlists, num, a)
else:
sigleDir(path,num,a)
except NotADirectoryError as e:
print("该目录下不能有 "+str(e).split('。')[-1])
def sigleDir(path,num,a):
changeName(path, a, num)
def doubleDir(dirlists,zero,a):
for dirlist in dirlists:
pathname = os.path.join(path, dirlist)
changeName(pathname,a,zero)
def changeName(pathname,a,zero):
zerostr = ''
filelist = os.listdir(pathname)
a1 = a
fileName = pathname.split('\\')[-1]
for files in filelist:
# 原始路径
Olddir = os.path.join(pathname, files)
if os.path.isdir(Olddir):
break
i = 0
b = len(str(a1))
while (i < (zero - b)):
zerostr = zerostr + '0'
# print(i)
i += 1
# .bmp
filetype = os.path.splitext(files)[1]
# filename = files.split('.')[0]
# 需要存储的路径 a 是需要定义修改的文件名
Newdir = os.path.join(pathname, fileName + "-" + zerostr + str(a1) + filetype)
zerostr = ''
os.rename(Olddir, Newdir)
a1 += 1
if __name__ == "__main__":
rename(path,num,start)