PreffixAndSuffix 類:
import os class PreffixAndSuffix: def __init__(self): pass @staticmethod def add_preffix(file_path, preffix): # 為file_path添加preffix前綴 並返回文件名絕對路徑 dir_name, filename, extension = PreffixAndSuffix.get_names(file_path) new_name = dir_name + preffix + filename + extension os.rename(file_path, new_name) return new_name @staticmethod def del_preffix(file_path, preffix): # 為file_path刪除preffix前綴 並返回文件名絕對路徑 dir_name, filename, extension = PreffixAndSuffix.get_names(file_path) if filename.startswith(preffix): # 判斷文件名是否以preffix開頭 filename = filename.partition(preffix)[2] # ('', preffix, 去掉前綴文件名)[2] new_name = dir_name + filename + extension os.rename(file_path, new_name) return new_name else: return file_path @staticmethod def add_suffix(file_path, suffix): # 為file_path添加preffix后綴 並返回文件名絕對路徑 dir_name, filename, extension = PreffixAndSuffix.get_names(file_path) new_name = dir_name + filename + suffix + extension os.rename(file_path, new_name) return new_name @staticmethod def del_suffix(file_path, suffix): # 為file_path刪除preffix后綴 並返回文件名絕對路徑 dir_name, filename, extension = PreffixAndSuffix.get_names(file_path) if filename.endswith(suffix): # 判斷文件名是否以preffix開頭 filename = filename.rpartition(suffix)[0] # (文件名, suffix, 擴展名)[0] new_name = dir_name + filename + extension os.rename(file_path, new_name) return new_name else: return file_path @staticmethod def get_names(file_path): file_path = os.path.abspath(file_path) # 獲取這個文件/文件夾的絕對路徑 dir_name = os.path.dirname(file_path) # 獲取所在目錄 dir_name = dir_name + os.sep # 為拼接做准備 filename, extension = os.path.splitext(file_path) #: 分離文件名與擴展名結果為(filename,擴展名) 如果參數為一個路徑則返回(路徑,'') name = filename.rpartition(os.sep)[2] # (文件目錄名 ,目錄分隔符, 文件名/目錄名) names = (dir_name, name, extension) #(文件所在目錄名, 文件名, 文件擴展名) # print(names) return names
測試類:
import os from PreffixAndSuffix import PreffixAndSuffix def change_name(file_path): pass def main(): y_or_n = {'Y': True, 'y': True, 'N': False, 'n': False, '': False} method = {'0': PreffixAndSuffix.add_preffix, '1': PreffixAndSuffix.add_suffix, '2': PreffixAndSuffix.del_preffix, '3': PreffixAndSuffix.del_suffix} file_path = str(input('請輸入要求改的文件路徑:')) designated_suffix_or_preffix = str(input('請輸入指定的文件名前綴或后綴:')) while True: ecursive_modify = str(input('是否遞歸修改?((Y/N)默認為N)')) if ecursive_modify in y_or_n: isecursive_modify = y_or_n[ecursive_modify] break while True: designated_suffix_modify = str(input('是否只修改特定后綴文件?((Y/N)默認為N)')) if designated_suffix_modify in y_or_n: isdesignated_suffix_modify = y_or_n[designated_suffix_modify] if isdesignated_suffix_modify: # 只修改指定后綴的文件 designated_suffix = str(input('請輸入指定的后綴(如:.txt、.jpg)')) break else: designated_suffix = '' break while True: tip = ''' 0:添加指定前綴 1:添加指定后綴 2:刪除指定前綴 3:刪除指定后綴 請輸入: ''' change_method_num = input(tip) if change_method_num in method: # 判斷是否在方法字典中 change_method = method[change_method_num] # 獲取選擇的方法入口地址。 break print('文件名:', file_path) print('指定的前綴或后綴:', designated_suffix_or_preffix) print('是否遞歸修改:', isecursive_modify) print('是否只修改特定后綴文件:', isdesignated_suffix_modify) print('指定修改的后綴:', designated_suffix) print('選擇方法:',method[change_method_num]) if not isecursive_modify: # 如果不遞歸修改 print('當前執行目錄:', file_path) os.chdir(file_path) for file in os.listdir(file_path): # 遍歷當前目錄下所有文件 abs_path = file_path + os.sep + file # 拼接文件的絕對路徑 if os.path.isfile(abs_path): # 如果是文件 if abs_path.endswith(designated_suffix): # 判斷是否為指定后綴。 new_name = change_method(abs_path, designated_suffix_or_preffix) # 調用方法字典中的選擇的方法 print('已成功改名:', new_name) print('-' * 80) else: for root, dirs, files in os.walk(file_path): # 遞歸遍歷 file_path print('當前執行目錄:', root) os.chdir(root) print(files) # 當前目錄下所有文件 for file in files: # 遍歷所有文件 abs_path = root + os.sep + file # 拼接絕對地址 if abs_path.endswith(designated_suffix): # 判斷是否為指定后綴 new_name = change_method(abs_path, designated_suffix_or_preffix) # 調用方法字典中的選擇的方法 print('已成功改名:', new_name) print('-' * 80) if __name__ == '__main__': main()