当前支持在单个文件夹下重命名,并提前备份原文件,过滤子文件夹,对于原名和新名相同的文件,不作修改
代码:
import os
import shutil
import datetime
def backup_files(src_path):
filenames = os.listdir(src_path)
for filename in filenames:
old_name = os.path.join(src_path, filename)
if os.path.isdir(old_name):
continue
shutil.copy(old_name, backup_path)
def batch_rename(src_path,date):
filenames = os.listdir(src_path)
same_name = []
count = 0
for filename in filenames:
old_name = os.path.join(src_path, filename)
if os.path.isdir(old_name):
continue
count += 1
change_name = date + '_%04d' % count + '.' + filename.split('.')[1]
new_name = os.path.join(src_path, change_name)
if change_name in filenames:
same_name.append(change_name)
continue
os.rename(old_name, new_name)
print('\n一共' + str(count) + '个文件,' + '修改了' + str(int(count) - len(same_name)) + '个文件的名字')
if len(same_name) > 0:
print('其中有' + str(len(same_name)) + '个文件的原名与新名相同,不作修改')
if __name__ == '__main__':
date = datetime.datetime.now().strftime('%m%d')
src_path = r'C:\Users\1\Desktop\2'
backup_path = src_path + '/' + 'backup/'
if not os.path.exists(backup_path):
os.makedirs(backup_path)
backup_files(src_path)
batch_rename(src_path,date)
笔记:
1.需要用到Python库的os
,shutil
,datetime
2.定义backup_files()
函数用于在重命名之前备份原文件
3.os.listdir()
列出文件夹内所有文件,包括子文件夹,由于并不需要重命名子文件夹,因此用下面代码过滤掉子文件夹,os.path.isdir()
判断是否为文件夹,如果是,则continue
跳过,代码如下:
if os.path.isdir(old_name):
continue
4.shutil.copy()
将原文件复制到另一个路径下,传入两个参数,第一个是需要复制的文件(包含路径),第二个是目标文件夹路径
5.定义batch_rename()
函数用于批量重命名
6.循环遍历文件,获取旧的文件名old_name
,同样需要过滤文件夹
7.设定新文件名的格式change_name
,可随意设置,这里以“当天日期+第n个文件+原后缀”为名,其中filename.split('.')[1]
将原文件名以.
为分隔符将名字和后缀分开,得到一个列表,取列表第1个元素,即后缀
8.为避免原名与新名重复而导致重命名后覆盖原文件,用if
判断语句跳过同名文件,并将同名的文件名添加到same_name
列表中,代码如下:
if change_name in filenames:
same_name.append(change_name)
continue
9.用os.rename()
方法对文件重命名,传入两个参数,第一个原文件名(包含路径),第二个新文件名(包含路径)
10.用datetime
获取当前日期和时间,datetime.datetime.now()
获取当前时间,年月日+时分秒,strftime()
用于格式化时间,可指定获取时间的格式,例如只输出年份,或者只输出月+日
#这里输出当天的月+日
date = datetime.datetime.now().strftime('%m%d')