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发送伪造的arp请求
Jan 09 Python
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
简单使用Python自动生成文章
Dec 25 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
Nov 09 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 Python
使用Django开发简单接口实现文章增删改查
May 09 Python
Python collections中的双向队列deque简单介绍详解
Nov 04 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
Python如何使用队列方式实现多线程爬虫
May 12 Python
如何利用python进行时间序列分析
Aug 04 Python
python 基于opencv 实现一个鼠标绘图小程序
Dec 11 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循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
原生js实现shift/ctrl/alt按键的获取
2013/04/08 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
Python返回数组/List长度的实例
2018/06/23 Python
python 3.7.0 下pillow安装方法
2018/08/27 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
社区端午节活动方案
2014/01/28 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
经济担保书范文
2014/04/02 职场文书
敬老院活动总结
2014/04/28 职场文书
品牌推广策划方案
2014/05/28 职场文书
委托公证书样本
2015/01/23 职场文书
餐厅开业活动方案
2019/07/08 职场文书
解析目标检测之IoU
2021/06/26 Python
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle
Java中API的使用方法详情
2022/04/06 Java/Android