Python學(xué)習(xí):用Python對文件夾內(nèi)的所有文件批量重命名

當(dāng)前支持在單個文件夾下重命名,并提前備份原文件,過濾子文件夾,對于原名和新名相同的文件,不作修改

代碼:

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()函數(shù)用于在重命名之前備份原文件

3.os.listdir()列出文件夾內(nèi)所有文件,包括子文件夾,由于并不需要重命名子文件夾,因此用下面代碼過濾掉子文件夾,os.path.isdir()判斷是否為文件夾,如果是,則continue跳過,代碼如下:

if os.path.isdir(old_name):
   continue

4.shutil.copy()將原文件復(fù)制到另一個路徑下,傳入兩個參數(shù),第一個是需要復(fù)制的文件(包含路徑),第二個是目標(biāo)文件夾路徑

5.定義batch_rename()函數(shù)用于批量重命名

6.循環(huán)遍歷文件,獲取舊的文件名old_name,同樣需要過濾文件夾

7.設(shè)定新文件名的格式change_name,可隨意設(shè)置,這里以“當(dāng)天日期+第n個文件+原后綴”為名,其中filename.split('.')[1]將原文件名以.為分隔符將名字和后綴分開,得到一個列表,取列表第1個元素,即后綴

8.為避免原名與新名重復(fù)而導(dǎo)致重命名后覆蓋原文件,用if判斷語句跳過同名文件,并將同名的文件名添加到same_name列表中,代碼如下:

if change_name in filenames:
    same_name.append(change_name)
    continue

9.用os.rename()方法對文件重命名,傳入兩個參數(shù),第一個原文件名(包含路徑),第二個新文件名(包含路徑)

10.用datetime獲取當(dāng)前日期和時間,datetime.datetime.now()獲取當(dāng)前時間,年月日+時分秒,strftime()用于格式化時間,可指定獲取時間的格式,例如只輸出年份,或者只輸出月+日

#這里輸出當(dāng)天的月+日
date = datetime.datetime.now().strftime('%m%d')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容