python批量修改文件名代码_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\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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值