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


Posted in Python onSeptember 01, 2014
#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)
Python 相关文章推荐
python将ip地址转换成整数的方法
Mar 17 Python
Python中关于使用模块的基础知识
May 24 Python
python 创建弹出式菜单的实现代码
Jul 11 Python
python实现树形打印目录结构
Mar 29 Python
python requests 测试代理ip是否生效
Jul 25 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
关于阿里云oss获取sts凭证 app直传 python的实例
Aug 20 Python
Pytorch之finetune使用详解
Jan 18 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
Python使用OpenCV实现虚拟缩放效果
Feb 28 Python
python中List的sort方法指南
Sep 01 #Python
Python抓取京东图书评论数据
Aug 31 #Python
Python深入学习之内存管理
Aug 31 #Python
Python深入学习之装饰器
Aug 31 #Python
Python深入学习之闭包
Aug 31 #Python
Python深入学习之对象的属性
Aug 31 #Python
Python深入学习之上下文管理器
Aug 31 #Python
You might like
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
2017/03/24 jQuery
JS关于刷新页面的相关总结
2018/05/09 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
浅谈javascript事件环微任务和宏任务队列原理
2020/09/12 Javascript
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
函授毕业个人自我评价
2014/02/20 职场文书
团日活动总结
2014/04/28 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
python 详解turtle画爱心代码
2022/02/15 Python
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技