时间:2021-07-01 10:21:17 帮助过:63人阅读
- #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)