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绘制图表大全总结
Feb 11 Python
利用python批量修改word文件名的方法示例
Oct 17 Python
Python WXPY实现微信监控报警功能的代码
Oct 20 Python
利用python如何处理nc数据详解
May 23 Python
python pandas修改列属性的方法详解
Jun 09 Python
Python+threading模块对单个接口进行并发测试
Jun 25 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
使用Pandas对数据进行筛选和排序的实现
Jul 29 Python
python数据库编程 Mysql实现通讯录
Mar 27 Python
python三引号如何输入
Jul 06 Python
python爬虫破解字体加密案例详解
Mar 02 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遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
php使用GeoIP库实例
2014/06/27 PHP
php读取csc文件并输出
2015/05/21 PHP
如何使用php实现评委评分器
2015/07/31 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
jquery对table中各数据的增加、保存、删除操作示例
2014/05/14 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
谈谈JavaScript中的垃圾回收机制
2020/09/17 Javascript
python字符串连接的N种方式总结
2014/09/17 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
Python PO设计模式的具体使用
2019/08/16 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
Flask 上传自定义头像的实例详解
2020/01/09 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
教师节商场活动方案
2014/02/13 职场文书
婚礼司仪主持词
2014/03/14 职场文书
五分钟演讲稿
2014/04/30 职场文书
出售房屋协议书范本
2014/10/06 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
班主任寄语2016
2015/12/04 职场文书
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL