九五美食网
您的当前位置:首页python批量修改文件名的实现代码

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
' % 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?
[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)
显示全文