首页 > 编程 > Python > 正文

python批量修改文件名的实现代码

2019-11-25 18:14:37
字体:
来源:转载
供稿:网友
#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)
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表