天天看點

python 批量修改檔案名

# -*- coding=utf-8 -*-
import os


def lst_rename(dirpath, o_key, n_key):
    """
    lst_rename :修改目前檔案夾内,檔案名的關鍵字(不會修改檔案夾)
    參數:dirpath 檔案夾路徑
         o_key   檔案名中待修改字元
         n_key   改成後字元,預設為空
    傳回:修改次數
    """
    # 擷取檔案夾内的檔案名清單
    filelist = os.listdir(dirpath)
    # 計數器
    flag = 0
    # 周遊目前檔案清單
    for filename in filelist:
        # 檔案名絕對路徑
        old_filepath = dirpath + os.sep + filename
        # 判斷是否為檔案夾,是則跳過
        if os.path.isdir(old_filepath):
            continue
        # 替換關鍵詞
        new_filename = filename.replace(o_key, n_key)
        # 新的檔案路徑
        new_filepath = dirpath + os.sep + new_filename
        # 修改檔案名
        os.rename(old_filepath, new_filepath)
        # 列印修改後的檔案名
        print(new_filename)
        # 計數
        flag += 1
        # 提示修改次數
    print("已修改", flag, "處")
    # 提示修改結束
    print('end')


def rename_walk(dirpath, o_key, n_key=''):
    """
    rename_walk :周遊修改指定路徑内的所有符合要求檔案名,含子檔案夾
    參數:dirpath 檔案夾路徑
         o_name   檔案名中待修改字元
         n_name   改成後字元,預設為空
    傳回:修改次數
    """
    # 初始化計數器
    flag = 0
    # 提示開始
    print('=== action ===')
    # 周遊檔案夾
    for wdir, ndir, filename_lst in os.walk(dirpath):
        # 周遊目前檔案夾檔案名
        for filename in filename_lst:
            # 檔案的絕對路徑
            oldfilepath = wdir + os.sep + filename
            # 新的檔案名
            new_filename = filename.replace(o_key, n_key)
            # 合成新的檔案絕對路徑
            newfilepath = wdir + os.sep + new_filename
            # 計數
            flag += 1
            # 修改檔案名
            os.rename(oldfilepath, newfilepath)
            # 列印修改後的檔案名
            print(new_filename)
    # 列印修改次數
    print("已修改", flag, "處")
    # 提示結束修改
    print('==== end ====')


def main():
    dirname = str(input("檔案夾絕對路徑 >>"))
    o_key = str(input("修改的關鍵字 >>"))
    n_key = str(input("修改的結果 >>"))
    # lst_rename(dirname, o_key, n_key)
    rename_walk(dirname, o_key, n_key)
    ok = input("按回車結束")


if __name__ == "__main__":
    main()