1. 问题描述
所需要实现的修改的种类
修改的方式:指增、删、更。
修改的内容:包括对前缀(或后缀)、特定字段。
2.解决思路
step1:实现单个文件名的修改
如何增加前/后缀,如何插入特定字段;
如何删除前/后缀,如何插入特定字段;
如何更换前/后缀,如何插入特定字段。
step2实现批量操作
3.寻找所需函数及方法
根据1.2确定的解决思路,寻找相应的功能函数。
(1)读取文件名的函数
os模块,os.listdir()
(2)文件名修改的函数
①修改文件名函数:os.rename()
②建立修改规则的函数:translate()
方法进行转换,并须通过str.maketrans()
建立转换规则表。
(3)批量修改用循环语句
for循环
4.相关函数用法解析
(1) translate()用法说明
用途:S.translate(transtab) -> str
将S中的字符按照一定的规则转换为str。 其中,转换规则由转换表transtab来给出。
语法
S.translate (transtab)
参数说明
transtab -- 转换规则表,需要借助maketrans()
方法(详见下一条)。
(2)str.maketrans()用法说明
用途:返回一个可用于str.translate()的转换表。
语法
str.maketrans (arg1[,arg2[,arg3])
参数说明
如果只有一个参数,那么它必须是一个将Unicode序数(整数)或字符映射到Unicode序数、字符串或None的字典。字符键将被转换为序数。
如果有两个参数,它们必须是<font color=red>长度相等</font>的字符串,在得到的字典中,arg1中的每个字符将映射到arg2中相同位置的字符。
如果有第三个参数,arg3必须是一个字符串,其字符将在结果中映射为None,即删除arg3所指定字体串中的字符。
(3)示例1:对给定字符串进行修改
#建立转换规则表
intab = "abc"
outtab = "123"
transtab = str.maketrans(intab,outtab)
#进行转换
sentence = "This is a test string!"
print(sentence.translate(transtab))
输出结果将sentence中的’a‘替换为了’1‘,如图
This is 1 test string!
(4)os.rename()用法说明
用途:重命名文件或目录。
语法
os.rename(old_fname,new_fname)
参数说明
old_fname---原文件名。
new_fname---修改后的新文件名。
(5)示例2:对指定文件夹中文件加前缀
# 导入os模块
import os
# 获取文件路径
path = 'C:\\myProject\\test'
# 设置工作路径
os.chdir(path)
# 读取文件名
filelist = os.listdir(path)
# 修改文件名
for fname in filelist:
os.rename(fname, '[pre]'+fname) # 加前缀
5.总体解决方案
实现对任意指定文件夹中的文件,进行任意所需要的重命名。
示例3:对指定文件夹中文件进行重命名
# 导入os模块
import os
# 获取文件路径
path = 'C:\\myProject\\test'
# 设置工作路径
os.chdir(path)
# 读取文件名
filelist = os.listdir(path)
# 建立重命名规则
transtab = str.maketrans('','','[pre]') #此规则为,删除文件名中所含有的[pre]
# 修改文件名
for fname in filelist:
os.rename(fname, fname.translate(transtab)) # 加前缀
说明
transtab = str.maketrans('','','[pre]')
此规则为,删除文件名中所含有的各个单独
字符,更确切的方式应当使用正则表达式
。
有关正则表达式,且听下回分解
。
6.本文运行环境说明
Python 3.6.4
注意:python 2 中 translate()函数使用方法略有不同。
7.主要参考资料
1.Python translate()方法https://www.runoob.com/python/att-string-translate.html
2.Python maketrans()方法https://www.runoob.com/python/att-string-maketrans.html
3.批量删除含特殊符号的前缀/后缀文件名——python实现https://blog.csdn.net/weixin_39975436/article/details/88668728