python zip_Python 批量修改文件名的3种实现方法

更新时间:2019-08-14    来源:python    手机版     字体:

【www.bbyears.com--python】

例子一

 代码如下

python 批量修改文件名代码
view plaincopy to clipboardprint?
#!/usr/bin/env python 
#coding=utf-8 
import os,os.path 
import shutil,string 
dir = C:\test
for i in os.listdir(dir): 
    newfile = i.replace(.,_) 
    oldfullfile = dir \ i 
    newfullfile = dir \ newfile 
    print oldfullfile 
    print newfullfile 
    shutil.move(oldfullfile,newfullfile) 
    print i 


例子二,

 代码如下

import sys, string, os, shutil
#输入目录名和前缀名,重命名后的名称结构类似prefix_0001
def RenameFiles(srcdir, prefix):
    srcfiles = os.listdir(srcdir)
    index = 1
    for srcfile in srcfiles:
        srcfilename = os.path.splitext(srcfile)[0][1:]
        sufix = os.path.splitext(srcfile)[1]
  #根据目录下具体的文件数修改%号后的值,"%04d"最多支持9999
        destfile = srcdir + "//" + prefix + "_%04d"%(index) + sufix
        srcfile = os.path.join(srcdir, srcfile)
        os.rename(srcfile, destfile)
        index += 1
srcdir = "D://Music"
prefix = "IMG_2011"
RenameFiles(srcdir, prefix)

例子三,非常完美的解决方案

一段 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)

本文来源:http://www.bbyears.com/jiaocheng/62115.html

热门标签

更多>>

本类排行