对数据进行按文件后缀名分类

2022-05-31 12:56:26 浏览数 (1)

【可执行程序 源代码】文件类型分类工具.rar

from os import walk,getcwd,makedirs,system

from shutil import copyfile,rmtree

from os import path

代码语言:javascript复制
cwd=getcwd()#获取当前路径
input(f"按下回车键将整理:{cwd}目录下的文件:")
d={}#保存各个类型的文件信息
cnt={}#保存重名文件的个数
idx={}#保存重名文件当前是几号,从1开始
if path.exists("output"):
rmtree("output")#删除之前的输出文件夹
for dirname,dirs,files in walk(cwd):
#遍历当前文件夹以及子文件夹下的所有文件
for i in files:
    #i表示文件名
    fileType=path.splitext(i)[1]#获取文件后缀名
    fileType=fileType.replace(".","")#替换后缀名的小数点
    if fileType.strip()=="":
        #没有后缀名的文件
        fileType="None"
    loction=dirname "\" i#文件所在绝对路径
    baseName=path.split(loction)[1]#获取文件名,和i的值一样
    prefix=".".join(baseName.split(".")[0:-1])#获取文件前缀名
    if fileType=="None":
        prefix=baseName
    file={"fileType":fileType,"loction":loction,"baseName":baseName,"prefix":prefix}
    if fileType not in d.keys():
        d[fileType]=[file]
    else:
        d[fileType].append(file)
    if baseName not in cnt.keys():
        cnt[baseName]=1
        idx[baseName]=1
    else:
        cnt[baseName] =1
#复制文件
for k,v in d.items():
#k表示文件类型
outputDir=f"output\{k}"
if path.exists(outputDir) is False:
    #创建以文件类型(k)命名的文件夹
    makedirs(outputDir)
for file in v:
    #遍历改类型的所有文件
    newFilePath=outputDir "\"#储存该文件的新路径
    newBaseName=""
    if cnt[file["baseName"]]==1:
        #改文件只出现过一次
        newBaseName=file["baseName"]
    else:
        #该文件出现过多次需要使用下划线加编号格式保存
        newBaseName=file["prefix"] "_" str(idx[file["baseName"]])
        if file["fileType"]!="None":
            newBaseName=f"{newBaseName}.{file['fileType']}"
        idx[file["baseName"]] =1
    newFilePath=cwd "\" newFilePath newBaseName
    copyfile(file["loction"],newFilePath)#复制文件
print("输出结果已保存到",cwd "output","文件夹中!")
system("pause")

0 人点赞