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显示进度条的方法
Sep 20 Python
python创建关联数组(字典)的方法
May 04 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
Python编程生成随机用户名及密码的方法示例
May 05 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
在python中pandas的series合并方法
Nov 12 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
python 使用tkinter与messagebox写界面和弹窗
Mar 20 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基础知识:函数基础知识
2006/12/13 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
用php解析html的实现代码
2011/08/08 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
JavaScript面象对象设计
2008/04/28 Javascript
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
Angular中支持SCSS的方法
2017/11/18 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
Python读取环境变量的方法和自定义类分享
2014/11/22 Python
连接Python程序与MySQL的教程
2015/04/29 Python
django做form表单的数据验证过程详解
2019/07/26 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
小学生自我鉴定
2013/10/12 职场文书
档案管理员岗位职责
2013/12/01 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技