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 14 Python
用Python实现通过哈希算法检测图片重复的教程
Apr 02 Python
Python中编写ORM框架的入门指引
Apr 29 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
Python抽象和自定义类定义与用法示例
Aug 23 Python
Python批量查询关键词微信指数实例方法
Jun 27 Python
python pandas时序处理相关功能详解
Jul 03 Python
python实现猜拳小游戏
Apr 05 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
python基本算法之实现归并排序(Merge sort)
Sep 01 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 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 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
php显示页码分页类的封装
2017/06/08 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
图片完美缩放
2006/09/07 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
对python中的高效迭代器函数详解
2018/10/18 Python
Python类装饰器实现方法详解
2018/12/21 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
python爬虫基础教程:requests库(二)代码实例
2019/04/09 Python
java判断三位数的实例讲解
2019/06/10 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
维德科技C#面试题笔试题
2015/12/09 面试题
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
社团文化节策划书
2014/02/01 职场文书
小学老师寄语大全
2014/04/04 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
大学英语专业求职信
2014/06/21 职场文书
全陪导游词
2015/02/04 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
php将xml转化对象的实例详解
2021/11/17 PHP