文件名批量修改(两种方法)

法二更好些

  • 法一
  • 法二

法一

# -*- coding: utf-8 -*-
import os
 
def rename():
    i=0    #文件命名从0开始
    object_class = "前缀" # 比如文件名为:图片0001.rng,那么前缀就是 图片, 没有则不填          
    path="C:\\Users\\ZH\\Desktop\\zzz"  #所要改名的文件地址
    # 该文件夹下所有的文件(包括文件夹)
    filename_list=os.listdir(path)          #返回指定路径下的文件和文件夹列表       
    print(filename_list)
    # 遍历所有文件
    for files in filename_list:     
        #if object_class in filelist[0]:    #如果文件中有这个前缀,则终止
         #   break
        # 原来的文件路径
        Olddir=os.path.join(path,files) 
        # 如果是文件夹则跳过                         
        if os.path.isdir(Olddir):    #用于判断对象是否为一个目录。             
            continue
        # 旧文件名
        filename=os.path.splitext(files)[0]      
        # 文件扩展名,需要保留
        filetype=os.path.splitext(files)[1]   
        # path为新的文件路径(该为保存到原文件夹); object_class+str('{:0>4}'.format(i))+filetype 为新文件名
        #'{:0>4}'.format(i),是要保证0001前边的000,4为四位数,下边有详细解释
        Newdir=os.path.join(path, object_class+str('{:0>4}'.format(i))+filetype)    
        # 重命名
        os.rename(Olddir,Newdir)
        i=i+1
    print("修改后:"+str(os.listdir(r"C:\\Users\\ZH\\Desktop\\zzz"))) ##返回指定路径下的文件和文件夹列表 

rename()

‘{:<填充><对齐><宽度><千分符><精度><类型>}’.format(i)。上述0是填充,>是右对齐,4是宽度
在这里插入图片描述

参考:https://blog.csdn.net/shaozhenghan/article/details/81205437

法二

import os
prefix='前缀1'# 比如文件名为:图片01风景.rng,那么前缀1就是 图片,没有则不填,如:prefix=''
suffix='前缀2'#风景则是   前缀2,没有则不填,如:suffix=''
length=3 #除去前缀后文件名要达到的长度,如01,length=2。001,length=3
base=1  #文件的后缀名
format='doc' #文件的后缀,即文件类型
path='C:\\Users\\ZH\\Desktop\\11'#要修改文件的存放路径
def PadLeft(str,num,padstr):#函数PadLeft将文件名补全到指定长度,str为补全的字符,num为要达到的长度,padstr为达到长度所添加的字符
    stringlength=len(str)
    n=num-stringlength
    if n>=0:
        str=padstr*n+str
    return str
print('the files in {} will be renamed'.format(path))#提示用户要改名
all_files=os.listdir(path)
print([f for f in all_files if os.path.isfile(path+'\\'+f)])#输出当前目录下所有文件
input=input('输入y,按回车,则继续:')#输入y,则继续
if input.lower()!='y':
    exit()
os.chdir(path)#切换工作路径
filenames=os.listdir(path)#获取当前目录中内容
i=base-1 #为了下面的i=i+1等于base
for filename in filenames:
    i=i+1
    if filename !='rename.py'and os.path.isfile(path+'\\'+filename):#判断filename 是否为rename.py,并且是否为文件。下有注释
        name=str(i)
        name=PadLeft(name,length,'0')#补全文件名
        t=filename.split('.')
        m=len(t)
        if format=='':#若未指定类型,则全部文件都修改
            os.rename(filename,prefix+name+suffix+'.'+t[m-1])
        else:
            if t[m-1]==format:#否则只修改该类型文件
                os.rename(filename,prefix+name+suffix+'.'+t[m-1])
            else:
                i=i-1#保证i连续
    else:
        i=i-1#保证i连续
print('完成重命名')
#all_files=os.listdir(path)
#print([f for f in all_files if os.path.isfile(path+'\\'+f)])#输出当前目录下文件名

注解:
if filename !=‘rename.py’and os.path.isfile(path+’\\’+filename):#判断filename 是否为rename.py,并且是否为文件。如果filename 不是rename.py且是文件,则往下运行

这里rename.py为该程序文件名字(可以不是这个名字),若把该文件与要重命名的文件放在一起,这里则需要改为该程序文件名字
该程序文件单独放置,且要重命名的文件没有名为rename.py,则不用管;若碰巧与该程序文件重名,则这行编程改为

if os.path.isfile(path+'\\'+filename):

你可能感兴趣的:(琐碎知识点)