一个用于批量处理文件名的python程序
# rename(path_value , file_type, name_operation, keepName = False ,pre="",suffix=""):
#rename("D:\\testFile", "jpg", 2) ## 前三个参数必须 后三个参数可选
# rename("D:\\testFile","jpg",0,True,"#","@")
# for i in range(18):
# rename("D:\\testFile", "jpg", i)
# time.sleep(3)
# for i in range(1000):
# valueI = random.randint(0, 17);
# rename("D:\\testFile", "jpg", valueI, True, "#", "@")
# time.sleep(3)
rename(path_value , file_type, name_operation, keepName = False ,pre=”“,suffix=”“)
# 文件重命名程序
import os;
import sys
import time, datetime
import random
global absolutepath
class switch(object):
def __init__(self, value):
self.value = value
self.fall = False
def __iter__(self):
"""Return the match method once, then stop"""
yield self.match
raise StopIteration
def match(self, *args):
"""Indicate whether or not to enter a case suite"""
if self.fall or not args:
return True
elif self.value in args: # changed for v1.5, see below
self.fall = True
return True
else:
return False
def sizeM(file):
fsize = os.path.getsize(absolutepath + file)
fsize = fsize / float(1024 * 1024)
var = round(fsize, 2)
vatInt = int(var / 1.0)
if (vatInt < 1): # 返回KB字符串标识 容易造成名字重复 1M 返回
fsizeKB = os.path.getsize(absolutepath + file)
fsizeKB = fsizeKB / float(1024)
return str(int(fsizeKB)) + "KB"
return str(vatInt) + "MB"
def sizeK(file):
fsize = os.path.getsize(absolutepath + file)
fsize = fsize / float(1024)
var = round(fsize, 2)
vatInt = int(var / 1.0)
if (vatInt < 1):
return "1KB";
return str(vatInt) + "KB"
def strTime(times):
time_local = time.localtime(times)
timeStr = time.strftime("%Y-%m-%d", time_local)
return timeStr;
def rename(path_value, file_type, name_operation, keepName=False, pre="", suffix=""):
sizeMap = {}
timeMap = {}
listSize = [] ## 从大到小
listTime = [] ## 从大到小
listSize_low = [] ## 从小到大
listTime_low = [] ## 从小到大
nameFlag = keepName ## 是否包含名字标识
opera = name_operation;
count = 0;
path = 'D:\\testFile';
path = path_value;
filelist = os.listdir(path) # 该文件夹下所有的文件(包括文件夹)
global absolutepath
absolutepath = path + "\\"
print(str("Files------" + str(filelist)))
for files in filelist: # 遍历所有文件 得到所有文件的大小 并保存到Map中 Map<File,size_KB>
Olddir = os.path.join(path, files); # 原来的文件路径
print(str("OLD----" + Olddir))
if os.path.isdir(Olddir): # 如果是文件夹则跳过
continue;
filename = os.path.splitext(files)[0]; # 文件名
filetype = os.path.splitext(files)[1]; # 文件原先扩展名
sizeTemp = os.path.getsize(absolutepath + files)
# print("oriSize:" + str(os.path.getsize(files)))
# print("Oriname:"+filename+" sizeK:"+str(sizeK(files)) +" sizeM:"+ str(sizeM(files))+" CreateTime"+str(os.path.getctime(files)))
timeMap[os.path.getctime(absolutepath + files)] = files
sizeMap[os.path.getsize(absolutepath + files)] = files
listSize.append(os.path.getsize(absolutepath + files))
listTime.append(os.path.getctime(absolutepath + files))
listSize_low.append(os.path.getsize(absolutepath + files))
listTime_low.append(os.path.getctime(absolutepath + files))
# timeMmap.__setitem__(files,os.path.getctime(files))
# = timeMmap + {files,os.path.getctime(files)}
# sizeMap.__setitem__(files,os.path.getsize(files))
# print("listTime-size="+str(len(listTime)))
print("listTime=" + str((listTime)))
# print("listSize-size="+str(len(listSize)))
print("listSize=" + str((listSize)))
print("=========================")
listTime_low.sort() # sort 默认为从小到大
listSize_low.sort()
listTime = sorted(listTime, reverse=True)
listSize = sorted(listSize, reverse=True)
print("listTime=" + str((listTime)))
print("listTime_low=" + str((listTime_low)))
print("=========================")
print("listSize=" + str((listSize)))
print("listSize_low=" + str((listSize_low)))
print("timeMap = " + str(timeMap))
print("SizeMap = " + str(sizeMap))
filelist = os.listdir(path) # 该文件夹下所有的文件(包括文件夹)
mCount = -1;
for files in filelist: # 遍历所有文件
Olddir = os.path.join(path, files); # 原来的文件路径
if os.path.isdir(Olddir): # 如果是文件夹则跳过
continue;
newFileName = "";
mCount = mCount + 1
origName = os.path.splitext(files)[0];
# 0 ---- 保持原有文件名不变 原有名字--> 原有名字
# 1 ---- 从0开始重命名文件名称 按照读取顺序进行排序 原有名字--> 0
# 2 ---- 从0开始重命名文件名称 添加中括号[] 按照读取顺序进行排序 原有名字--> [0]
# 3 ---- 在原有名字之前添加序号从0开始的序号0_ 原有名字--> 0_原有名字
# 4 ---- 计算文件大小进行排序,最大size的文件名为0_xxKB,最小size的文件名最后 原有名字--> 0_xxKB (文件排序 大到小KB) ## 小于1KB 则使用1KB 表示 小于1MB大小的使用1MB表示
# 5 ---- 计算文件大小进行排序,最大size的文件名为0_xxMB,最小size的文件名最后 原有名字--> 0_xxMB(文件排序 大到小MB) ## 小于1KB 则使用1KB 表示 小于1MB大小的使用1MB表示
# 6 ---- 计算文件大小进行排序,最小size的文件名为0_xxKB,最大size的文件名最后 原有名字--> 0_xxKB(文件排序 小到大KB)## 小于1KB 则使用1KB 表示 小于1MB大小的使用1MB表示
# 7 ---- 计算文件大小进行排序,最小size的文件名为0_xxMB,最大size的文件名最后 原有名字--> 0_xxMB(文件排序 小到大MB)## 小于1KB 则使用1KB 表示 小于1MB大小的使用1MB表示
# 8 ---- 计算文件创建时间并进行排序 最早第一创建的文件名为0_xxxx-xx-xx 原有名字--> 0_2018-01-01 1_2018-01-01
# 9 ---- 计算文件创建时间并进行排序 最晚第一创建的文件名为0_xxxx-xx-xx 原有名字--> 0_2018-03-01 0_2018-02-01
# 10 ---- 计算文件创建的时间 并以此为依据排序,再添加上文件的大小KB 最早(离现在最远)第一创建的文件名为 0_xxxx-xx-xx_xxKB
# 11 ---- 计算文件创建的时间 并以此为依据排序,再添加上文件的大小MB 最早(离现在最远)第一创建的文件名为 0_xxxx-xx-xx_xxMB
# 12 ---- 计算文件创建的时间 并以此为依据排序,再添加上文件的大小KB 最晚(离现在最近)创建的文件名为 0_xxxx-xx-xx_xxKB
# 13 ---- 计算文件创建的时间 并以此为依据排序,再添加上文件的大小KB 最晚(离现在最近)创建的文件名为 0_xxxx-xx-xx_xxMB
# 14 ---- 计算文件大小 并以此为依据排序,再添加上文件的创建时间 文件最大排第一 创建的文件名为 0_xxKB_xxxx-xx-xx
# 15 ---- 计算文件大小 并以此为依据排序,再添加上文件的创建时间 文件最大排第一 创建的文件名为 0_xxMB_xxxx-xx-xx
# 16 ---- 计算文件大小 并以此为依据排序,再添加上文件的创建时间 文件最小排第一 创建的文件名为 0_xxKB_xxxx-xx-xx
# 17 ---- 计算文件大小 并以此为依据排序,再添加上文件的创建时间 文件最小排第一 创建的文件名为 0_xxMB_xxxx-xx-xx
newFileName = origName;
for case in switch(opera):
if case(0):
print("operaNum = " + str(0))
break
if case(1):
print("operaNum = " + str(1))
suijishu = random.randint(0, 99);
newFileName = str(mCount) + "_" + str(suijishu);
break
if case(2):
print("operaNum = " + str(2))
suijishu = random.randint(0, 99);
newFileName = "[" + str(mCount) + "_" + str(suijishu) + "]";
break
if case(3):
print("operaNum = " + str(3))
# newFileName = str(mCount)+"_"+origName;
newFileName = str(mCount) + "_" + origName;
break
if case(4):
print("operaNum = " + str(4))
# mSize = sizeMap[os.path.getsize(files)] # 放置文件大小的Map
intSizeK = sizeK(files)
mIndex = listSize.index(os.path.getsize(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + str(intSizeK);
break
if case(5):
print("operaNum = " + str(5))
# mSize = sizeMap[os.path.getsize(files)] # 放置文件大小的Map
intSizeK = sizeM(files)
mIndex = listSize.index(os.path.getsize(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + str(intSizeK);
break
if case(6):
print("operaNum = " + str(6))
intSizeK = sizeK(files)
mIndex = listSize_low.index(os.path.getsize(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + str(intSizeK);
break
if case(7):
print("operaNum = " + str(7))
# mSize = sizeMap[files] # 放置文件大小的Map
intSizeM = sizeM(files)
mIndex = listSize_low.index(os.path.getsize(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + str(intSizeM);
break
if case(8):
print("operaNum = " + str(8))
# 放置文件大小的Map 得到时间 依据时间得到字符串
timeStr = strTime(os.path.getctime(absolutepath + files))
mIndex = listTime.index(os.path.getctime(absolutepath + files)) # 依据文件大小排序 的序号
suijishu = random.randint(0, 99);
newFileName = str(mIndex) + "_" + timeStr + "_" + str(suijishu);
break
if case(9):
print("operaNum = " + str(9))
timeStr = strTime(os.path.getctime(absolutepath + files))
mIndex = listTime_low.index(os.path.getctime(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + timeStr;
break
if case(10):
print("operaNum = " + str(10))
timeStr = strTime(os.path.getctime(absolutepath + files))
intSizeK = sizeK(files)
mIndex = listTime.index(os.path.getctime(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + timeStr + "_" + str(intSizeK);
break
if case(11):
print("operaNum = " + str(11))
timeStr = strTime(os.path.getctime(absolutepath + files))
intSizeM = sizeM(files)
mIndex = listTime.index(os.path.getctime(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + timeStr + "_" + str(intSizeM);
break
if case(12):
print("operaNum = " + str(12))
intSizeK = sizeK(files)
timeStr = strTime(os.path.getctime(absolutepath + files))
mIndex = listTime_low.index(os.path.getctime(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + timeStr + "_" + str(intSizeK);
break
# 13 ---- 计算文件创建的时间 并以此为依据排序,再添加上文件的大小KB 最晚(离现在最近)创建的文件名为 0_xxxx-xx-xx_xxMB
# 14 ---- 计算文件大小 并以此为依据排序,再添加上文件的创建时间 文件最大排第一 创建的文件名为 0_xxKB_xxxx-xx-xx
# 15 ---- 计算文件大小 并以此为依据排序,再添加上文件的创建时间 文件最大排第一 创建的文件名为 0_xxMB_xxxx-xx-xx
# 16 ---- 计算文件大小 并以此为依据排序,再添加上文件的创建时间 文件最小排第一 创建的文件名为 0_xxKB_xxxx-xx-xx
# 17 ---- 计算文件大小 并以此为依据排序,再添加上文件的创建时间 文件最小排第一 创建的文件名为 0_xxMB_xxxx-xx-xx
if case(13):
print("operaNum = " + str(13))
intSizeM = sizeM(files)
timeStr = strTime(os.path.getctime(absolutepath + files))
mIndex = listTime_low.index(os.path.getctime(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + timeStr + "_" + str(intSizeM);
break
if case(14):
print("operaNum = " + str(14))
timeStr = strTime(os.path.getctime(absolutepath + files))
intSizeK = sizeK(files)
mIndex = listSize.index(os.path.getsize(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + str(intSizeK) + "_" + timeStr;
break
if case(15):
print("operaNum = " + str(15))
timeStr = strTime(os.path.getctime(absolutepath + files))
intSizeM = sizeM(files)
mIndex = listSize.index(os.path.getsize(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + str(intSizeM) + "_" + timeStr;
break
if case(16):
print("operaNum = " + str(16))
timeStr = strTime(os.path.getctime(absolutepath + files))
intSizeK = sizeK(files)
mIndex = listSize_low.index(os.path.getsize(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + str(intSizeK) + "_" + timeStr;
break
if case(17):
print("operaNum = " + str(17))
timeStr = strTime(os.path.getctime(absolutepath + files))
intSizeM = sizeM(files)
mIndex = listSize_low.index(os.path.getsize(absolutepath + files)) # 依据文件大小排序 的序号
newFileName = str(mIndex) + "_" + str(intSizeM) + "_" + timeStr;
break
if case():
print("not in 0-17")
print("newFileName:" + newFileName)
filename = os.path.splitext(files)[0]; # 原先文件名
filetype = os.path.splitext(files)[1]; # 文件原先扩展名
if nameFlag == True:
print("需要保留原始文件名字")
if newFileName.find(origName) > -1:
print("新文件名已包含 原始文件名")
else:
print("新文件名不包含原始文件名 需要再次添加")
newFileName = newFileName + "_" + origName
print("老名字:" + Olddir + " 新名字:" + pre + newFileName + suffix + "." + file_type)
Newdir = os.path.join(path, pre + newFileName + suffix + "." + file_type); # 新的文件路径 + 参数定义扩展名
os.rename(Olddir, Newdir)
# 参数1---文件夹所在路径
# 参数2---文件后缀
# 参数3---定义文件名定义的规则
# 0 ---- 保持原有文件名不变 原有名字--> 原有名字
# 1 ---- 从0开始重命名文件名称 按照读取顺序进行排序 原有名字--> 0
# 2 ---- 从0开始重命名文件名称 添加中括号[] 按照读取顺序进行排序 原有名字--> [0]
# 3 ---- 在原有名字之前添加序号从0开始的序号0_ 原有名字--> 0_原有名字
# 4 ---- 计算文件大小进行排序,最大size的文件名为0_xxKB,最小size的文件名最后 原有名字--> 0_xxKB (文件排序 大到小KB) ## 小于1KB 则使用1KB 表示 小于1MB大小的使用1MB表示
# 5 ---- 计算文件大小进行排序,最大size的文件名为0_xxMB,最小size的文件名最后 原有名字--> 0_xxMB(文件排序 大到小MB) ## 小于1KB 则使用1KB 表示 小于1MB大小的使用1MB表示
# 6 ---- 计算文件大小进行排序,最小size的文件名为0_xxKB,最大size的文件名最后 原有名字--> 0_xxKB(文件排序 小到大KB)## 小于1KB 则使用1KB 表示 小于1MB大小的使用1MB表示
# 7 ---- 计算文件大小进行排序,最小size的文件名为0_xxMB,最大size的文件名最后 原有名字--> 0_xxMB(文件排序 小到大MB)## 小于1KB 则使用1KB 表示 小于1MB大小的使用1MB表示
# 8 ---- 计算文件创建时间并进行排序 最早第一创建的文件名为0_xxxx-xx-xx 原有名字--> 0_2018-01-01 1_2018-01-01
# 9 ---- 计算文件创建时间并进行排序 最晚第一创建的文件名为0_xxxx-xx-xx 原有名字--> 0_2018-03-01 0_2018-02-01
# 10 ---- 计算文件创建的时间 并以此为依据排序,再添加上文件的大小KB 最早(离现在最远)第一创建的文件名为 0_xxxx-xx-xx_xxKB
# 11 ---- 计算文件创建的时间 并以此为依据排序,再添加上文件的大小MB 最早(离现在最远)第一创建的文件名为 0_xxxx-xx-xx_xxMB
# 12 ---- 计算文件创建的时间 并以此为依据排序,再添加上文件的大小KB 最晚(离现在最近)创建的文件名为 0_xxxx-xx-xx_xxKB
# 13 ---- 计算文件创建的时间 并以此为依据排序,再添加上文件的大小KB 最晚(离现在最近)创建的文件名为 0_xxxx-xx-xx_xxMB
# 14 ---- 计算文件大小 并以此为依据排序,再添加上文件的创建时间 文件最大排第一 创建的文件名为 0_xxKB_xxxx-xx-xx
# 15 ---- 计算文件大小 并以此为依据排序,再添加上文件的创建时间 文件最大排第一 创建的文件名为 0_xxMB_xxxx-xx-xx
# 16 ---- 计算文件大小 并以此为依据排序,再添加上文件的创建时间 文件最小排第一 创建的文件名为 0_xxKB_xxxx-xx-xx
# 17 ---- 计算文件大小 并以此为依据排序,再添加上文件的创建时间 文件最小排第一 创建的文件名为 0_xxMB_xxxx-xx-xx
# 参数4---keepName 默认为FALSE , 用于提供用户原则是否 在前面参数生成的名字中加入 文件原有名字 + _原有名字
# 参数5---可以在前面四个参数确定的文件名字前 加入 静态的前缀 prefix
# 参数6---可以在前面四个参数确定的文件名字前 加入 静态的后缀 suffix
# rename(path_value , file_type, name_operation, keepName = False ,pre="",suffix=""):
rename("D:\\testFile", "jpg", 2) ## 前三个参数必须 后三个参数可选
# rename("D:\\testFile","jpg",0,True,"#","@")
# for i in range(18):
# rename("D:\\testFile", "jpg", i)
# time.sleep(3)
# for i in range(1000):
# valueI = random.randint(0, 17);
# rename("D:\\testFile", "jpg", valueI, True, "#", "@")
# time.sleep(3)