【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)