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

#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)
(0)

相关推荐

  • 利用python批量修改word文件名的方法示例

    前言 最近不小心把硬盘给格式化了,由于当时的文件没有备份,所以一下所有的文件都没有了,于是只能采取补救措施,用文件恢复软件恢复了一部分的数据出来,但是恢复完毕的文件的文件名全丢了,所有的文件只有代号,如下面的图: 几万个文件这要是手动的改得要改到明年.所以便动手写了一个python的脚本程序来代替这种繁杂的操作. 实现分析 想让程序来理解我的word文档里到底是什么内容是不可能的了,但是好在我的word文档内容都有标题,大部分的标题正好就是这个文档的文件名,于是我便打算把文档的标题当作文件名,而

  • Python批量修改文本文件内容的方法

    Python批量替换文件内容,支持嵌套文件夹 import os path="./" for root,dirs,files in os.walk(path): for name in files: #print name if name.endswith(".html"): #print root,dirs,name filename=root+"/"+name f=open(filename,"r") fileconten

  • Python实现批量修改文件名实例

    本文实例讲述了Python实现批量修改文件名的方法.分享给大家供大家参考.具体如下: 下载了评书<贺龙传奇>,文件名中却都含有xxx有声下载,用脚本将其去掉.脚本涉及os.rename重命名方法,str.partition方法使用, 及正则match,search方法区别 # encoding:utf-8 ## # 文件名如: # 贺龙传奇\d+[有声下吧www.ysx8.com].mp3 ## import os,re fs=os.listdir('单田芳_贺龙传奇') for f in f

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

    我曾以为,写脚本是很难的,直到我遇到了Python 前言随着国内版权意识的跟进,很多影视音乐资源开始收费,而且度盘又经常随意封杀各种资源,所以,为了保护资源,老司机们越来越倾向于把资源下载到本地,但随着本地资源量的增多,资源管理就成了一件比较头疼的事情;对于资源的管理,方法有很多,我比较喜欢为资源起一个好记的名字,但改文件名是一件无聊又耗时的事情,所以,一个批量重命名的脚本就变得非常重要. 1.批量添加前缀功能 批量重命名 批量重命名逻辑,分三步: (1)确定需要命名的文件们 (2)确定新的文件

  • python批量修改文件后缀示例代码分享

    ipad的goodreader对JS文件支持不太好,虽然可以读取它但总是无法退出,回不了goodreader的主界面,因此我需要把js文件批量变成纯文本.基于这个目的,我搞了下面一个小应用: 复制代码 代码如下: # -*- coding:utf-8 -*- import osdef rename():    path = raw_input("请输入要处理的文件夹路径")    print path    old_ext = "."+raw_input("

  • python实现linux服务器批量修改密码并生成execl

    批量修改linux服务器密码,同时生成execl表格 复制代码 代码如下: #!/usr/bin/env python#coding:utf8#随机生成自定义长度密码from random import choiceimport string,pickle def GenPassword(length=8,chars=string.ascii_letters+string.digits):    return ''.join([choice(chars) for i in range(lengt

  • Python批量修改文件后缀的方法

    近期下载了很多各种教程, 但是不幸的是后缀名都是 ".mp4", 而本人喜欢 ".rmvb" 后缀,由于有轻微洁癖, 受不了后面的 ".mp4" 缀, 但是手动修改又太过繁琐, 所以用近期刚学的 Python 来偷懒吧 !   : ) 如图为程序运行前的文件名 我们要做的呢, 就是在当前目录下,新建一个python文件, 如上图 demo2.py 然后用编辑器打开敲入如下代码: 复制代码 代码如下: import os # 列出当前目录下所有的文

  • python练习程序批量修改文件名

    复制代码 代码如下: # encoding:utf-8 ### 文件名如:# 下吧.mp3##import os,re fs=os.listdir('xb')for f in fs: ######方法一:partition获取无用字符 #1.将文件名以'['符分为3部分 #ls=f.partition('[') #2.ls[0]为需要文件名,因此获取ls[1:] #dirtystring = ''.join(ls[1:]) #3.开始替换 #newname=f.replace(dirtystri

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

    #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' #---------------------------------------------------------------

  • 视频合并时使用python批量修改文件名的方法

    不知道大家有没有遇到这样的情况,比如视频合并时文件名没有按照正常顺序排列,像这样 可见,文件名排序是乱的.这个样子合并出来的视频一定也是乱的.所以得想办法把文件名修改一下,让软件读取出正确的顺序.闲话少说,上代码. """ 注意:一.文件名除去扩展名必须以 '_' + 数字 结尾.  二.convert.py 放在文件目录.  三.目录中不能有多余文件 主要算法: 根据最大数字的位数添加0 例如,如果最大数字为123,那么位数为3位,  1就要变成001.2变成002.23变

  • 使用python批量修改文件名的方法(视频合并时)

    不知道大家有没有遇到这样的情况,比如视频合并时文件名没有按照正常顺序排列,像这样 可见,文件名排序是乱的.这个样子合并出来的视频一定也是乱的.所以得想办法把文件名修改一下,让软件读取出正确的顺序.闲话少说,上代码. """ 注意:一.文件名除去扩展名必须以 '_' + 数字 结尾.  二.convert.py 放在文件目录.  三.目录中不能有多余文件 主要算法: 根据最大数字的位数添加0 例如,如果最大数字为123,那么位数为3位,  1就要变成001.2变成002.23变

  • python批量修改文件名的示例

    今天中午看了一集动漫<进击的巨人>,看完后发现这些视频的名称有点乱,于是编程来批量重命名. 重命名之前的各名称格式为--飞极速[www.feijisu.com][16][720P][CHS-JAP] AVC.mp4,可以看到这个中间是有集数的,因此可以使用正则表达式提取,导入re模块. 然后由于要修改文件名,需要用到os模块. os.listdir(path) 上面这行代码可以将路径path中所有的文件的名称放入一个列表中. os.path.abspath(name) 这行代码可以得到名为na

  • Python批量修改文件名的方式详解

    目录 批量修改文件名(保留后缀) 批量修改文件名(全改) 读取文件下的所有文件名 总结 批量修改文件名(保留后缀) 这种方法,保留了文件原本的后缀.这里主要演示的是对图片名的修改. # 批量修改文件名 # 批量修改图片文件名 import os import re import sys path = 'F:\Temp\ZZ' fileList = os.listdir(path) # 待修改文件夹 print("修改前:"+str(fileList)) # 输出文件夹中包含的文件 cu

  • Python批量修改文件名,文件再多也只要一秒

    目录 一.我为什么要写这篇 二.在原有的名字前中后批量加字 三.所有文件重新命名并添加序号 四.导入Excel数据批量修改为文件名 一.我为什么要写这篇 好兄弟们,妹子要少看,技能要多学,每天一个小技巧,撩妹手段少不了~ 昨天有人问我怎么批量修改文件名,然后我随便写了一种,他说我不nice,这我就忍不住了,反手就给他写了好几种,你们来看看,这个到底刑不刑. 很多兄弟在学习Python的时候因为不太明确学习方向,没有好的学习资料,遇到问题也没人解答,就很难受,甚至可能学着学着就放弃了,直接私我就行

  • Python批量修改文件名实例操作分享

    此处以修改图片文件名为例,将图片复制到新的目录中再修改名称~ 原始文件名如下: 修改后的效果如下: 代码: 实现将one文件夹中的每一个图片复制到two文件夹并修改图片名为按照a.b.c.d递增排序 思路:重命名为新建一个文件将原来文件内容复制过去 import os   def alterFileName(source,target):     print("当前文件夹下有以下几个文件>>>")     file_list=os.listdir(source)  

  • python批量修改文件名的三种方法实例

    目录 前言 一.python批量修改文件名 二.python批量修改文件名(按顺序) 三.python批量修改文件名(删除指定字符) 总结 前言 当我们从网站爬取若干张图片,或需要将一些txt.excel.jpg等大批量的文件修改为有规律的名称,方便整理. 提示:以下是本篇文章正文内容,下面案例可供参考 一.python批量修改文件名 提示:待修改的文件夹下只能包含需要修改的文件,然后更改源码里面的路径即可. 1.源码 代码如下(示例): #批量修改文件名 #批量修改图片文件名 import o

  • 使用Python批量修改文件名的代码实例

    这两天在整理一些文章,但是文件夹中每个文章没有序号会看起来很乱,所以想着能不能用Python写一个小脚本. 于是乎,参考了多方资料,简单写了下面几行代码 import osdef tekan(): i=1 #为序号赋初值 for old_file in os.listdir('.'): #os.listfir('.')用于获取当前文件夹所有文件名,'.'表示当前文件夹,也可改为目标文件路径 if 'py' not in old_file: #由于脚本文件不需要修改文件名,所以这里做个判断 #ne

随机推荐