python批量修改文件名的实现代码
作者:mdxy-dxy 发布时间:2023-08-02 19:06:53
标签: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)


猜你喜欢
- 这篇论坛文章(赛迪网技术社区)根据网友的个人实践扼要的讲解了将MySQL 5.0下的数据导入到MySQL 3.23中的具体方法及步骤,详细内
- 目录行遍历实现linecache实现命令行sed获取总结概要行遍历实现在python中如果要将一个文件完全加载到内存中,通过file.rea
- Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长。如果在创建数据库的
- 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流!为了保证在业务高峰期,线上系统也能保证一定的弹性和稳定性,最有效的方案就是进行服
- 1. 概念显著性检测,就是使用图像处理技术和计算机视觉算法来定位图片中最“显著”的区域。显著区域就是
- 废话少说,先上代码File:logger.conf[formatters]keys=default[formatter_default]fo
- 前言这篇博客将了解什么是特征,角点,哈里斯角点检测(Harris Corner Detection)的概念。并使用cv2.cornerHar
- 代码:--库是否存在if exists(select * from master..sysdatabases where name=N
- 一、之前解决方案大概是这样:短时间内同一位好友发送了多条消息,当他随便撤回一条消息时,我们不能确定他到底撤回的到底是哪一条消息。只能猜他可能
- 一、基本介绍logging 模块是python自带的一个包,因此在使用的时候,不必安装,只需要import即可。logging有 5 个不同
- 1、Mysql errono 1005 : 主外键不是完全一致 , 请检查如下几点: a、字段是否存在 b、类型是否一致(注意unsigne
- PHP ini_set用来设置php.ini的值,在函数执行的时候生效,脚本结束后,设置失效。无需打开php.ini文件,就能修改配置,对于
- 一、表单控件绑定v-modelv-model 双向数据绑定;一般用于表单元素,会忽略表单元素的value、checked、selected的
- 本文实例为大家分享了python实现分页效果展示的具体代码,供大家参考,具体内容如下难点:清空Layout#!/usr/bin/python
- 0、前言在python2.7及以上的版本,str.format()的方式为格式化提供了非常大的便利。与之前的%型格式化字符串相比,他显得更为
- 本文实例讲述了python计算N天之后日期的方法。分享给大家供大家参考。具体如下:python计算N天之后的日期,可以自己写成一个函数,想得
- 我们大家都知道CSS功能的强大,而有关CSS基本的排版控制虽然已有详细的使用说明和参考教程,但还有许多丰富的CSS排版能力,是很少能查到的。
- 前言终于能够挤出一点时间来总结最近学到的一些技术知识点了,博主这两周被居家隔离-集中隔离-居家隔离来回折腾,现在终于是得到解放能够空出的时间
- 本文实例讲述了Python设计模式之模板方法模式。分享给大家供大家参考,具体如下:模板方法模式(Template Method Patter
- 1. csv文件自带列标题import pandas as pd df_example = pd.read_csv('Pandas_