#coding:utf-8 #批量修改文件名 import os import re import datetime re_st = r\'(\\d+)\\+\\s?\\((\\d+)\\)\' #用于匹配旧的文件名,需含分组 re_match_old_file_name = re.compile(re_st) #要修改的目录 WORKING_PATH = r\'F:\\Gallery\' #---------------------------------------------------------------------- def rename_fomat(name): \"\"\" 文件重命名格式组织模块(一般修改这里就可以了) NOTE:返回类型必须是unicode \"\"\" if name: re_rn = re_match_old_file_name.findall(name) if re_rn and re_rn != []: re_rn = re_rn[0] num = int(re_rn) new_nm = u\'NO.%04d\' % ( num) return new_nm #---------------------------------------------------------------------- def logs(error): \"\"\" 错误记录 \"\"\" log = \'\' LOG_FILE = open(r\'./log.txt\', \'a\') live_info =\"\"\" ========== Time : %s title : %s Path : %s ========== \"\"\" % ( datetime.datetime.now(), str(error[\'title\']), str(error[\'index\']), ) log += live_info errors = error[\'error_paths\'] for item in errors: item = \'%s\\n\' % item log += item log = log.encode(\'utf-8\') try: LOG_FILE.write(log) except IOError: print u\'写入日志失败\' finally: LOG_FILE.close() #---------------------------------------------------------------------- def rename(old, new): \"\"\" 文件重命名模块 return: 0:rename success 1:the new path is exists -1:rename failed \"\"\" if not os.path.exists(new): try: os.renames(old, new) return 0 except IOError: print \'path error:\', new return -1 else: return 1 #---------------------------------------------------------------------- def get_dirs(path): \"\"\" 获取目录列表 \"\"\" if os.path.exists(path): return os.listdir(path) else: return -1 #---------------------------------------------------------------------- def get_input_result(word, choice): \"\"\" 获取正确的输入结果 \"\"\" correct_result = set(choice) word = \'===%s?\\n[in]:\' % (word) while True: in_choice = raw_input(word) if in_choice in correct_result: return in_choice #---------------------------------------------------------------------- def batch_rename(index, dirs = []): \"\"\" 批量修改文件 \"\"\" index = unicode(index) errors = [] if dirs == []: dirs = get_dirs(path = index) if dirs and dirs != []: for item in dirs: item = unicode(item) new_name = rename_fomat(item) if new_name : old_pt = u\'%s\\\\%s\'% (index, item) new_pt = u\'%s\\\\%s\'% (index, new_name) res_rn = rename(old_pt, new_pt) if res_rn != 0: errors.append(item) else: errors.append(item) if errors and errors != []: print \'Rename Failed:\' logs({ \'index\': index, \'title\': \'Rename Failed\' , \'error_paths\': errors, }) for i, item in enumerate(errors): print item, \'|\', if i % 5 == 4: print \'\' print \'\' else: return -1 #---------------------------------------------------------------------- def batch_rename_test(index): \"\"\" 测试 返回过滤结果 \"\"\" index = unicode(index) errors = [] correct = [] dirs = get_dirs(path = index) if dirs and dirs != []: for x, item in enumerate(dirs): item = unicode(item) new_name = rename_fomat(item) if new_name : correct.append(item) old_pt = u\'%s\\\\%s\'% (index, item) new_pt = u\'%s\\\\%s\'% (index, new_name) print \'[%d]O: %s\' % ( x + 1, old_pt) print \'[%d]N: %s\' % ( x + 1, new_pt) else: errors.append(item) if errors and errors != []: print \'Not Match:\' logs({ \'index\': index, \'title\': \'Not Match\', \'error_paths\': errors, }) for i, item in enumerate(errors): print item, \'|\', if i % 5 == 4: print \'\' print \'\' return correct #---------------------------------------------------------------------- def manage(index): \"\"\" 程序组织块 \"\"\" file_filter = batch_rename_test(index) do_choice = get_input_result( word = \'Do with this(y / n)\', choice = [\'y\', \'n\'] ) if do_choice == \'y\': batch_rename(index, dirs= file_filter) print \'Finished !\' if __name__ == \'__main__\': path = WORKING_PATH manage(index = path)
下一篇:Python3基础之函数用法