python批量修改文件名代码实例

发布时间:2020-09-14编辑:脚本学堂
python批量修改文件名的实现代码,对于目录中名称各异的文件名,如何批量修改为统一的格式,python可以实现快速批量修改文件后缀名的例子。

python批量修改文件名

代码:
 

复制代码 代码示例:
#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 = '%sn' % 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)

您可能感兴趣的文章: