需要实现的功能:文件整理工具
具体需求:
1. 文件名批量修改
2. 批量将指定目录下的子目录中的文件,移动到指定目录,并添加将子目录的名字添加到文件名中
(这些需求也可以通过批处理实现)
所需技术(可用作搜索关键词):
1. 读取指定目录下的文件列表、修改文件名
推荐教程:https://www.cnblogs.com/Handsome-Lan/p/10702294.html
2. 获取指定目录下的所有子目录和文件名
推荐教程:https://www.cnblogs.com/bigtreei/p/9316369.html
3. 正则表达式(在替换文件名时使用)
推荐教程:https://www.cnblogs.com/zery/p/3438845.html
应用场景:
1. 整理下载的资源
2. 文件归档
实现思路
根据需求,我们发现可以通过如下方式实现:
需求1:循环遍历指定目录(文件夹)下的所有文件,使用正则表达式或字符串替换文件名,实现文件名的批量修改
需求2:循环遍历指定目录(文件夹)及其子目录下的所有文件,替换文件所在路径使文件移动到根目录下,并将文件所在子目录名称填写到文件名中,实现子目录文件整理
实现代码
import osimport redef filename_rename(path: str, pattern: str, repl: str): """ 文件名批量修改(可以依据正则表达式修改目录及其子目录下所有文件的文件名) :param path: 需要修改文件名的文件目录 :param pattern: 需要被替换内容的正则表达式 :param repl: 需要将正则表达式匹配的内容替换为的内容 """ for root, dirs, files in os.walk(path): # 循环遍历指定目录及其所有子目录 for file in files: # 遍历当前目录(子目录)下的所有文件 old_name = root + "" + file # 当前文件名(修改前的文件名) new_name = re.sub(pattern, repl, old_name) # 使用正则表达式修改文件名 # new_name = old_name.replace(pattern,repl) # 也可以直接使用字符串替换修改文件名 os.rename(old_name, new_name) # 修改文件名 print("修改文件名:", old_name, "→", new_name)def filename_collation(path: str): """ 批量将指定目录下的子目录中的文件,移动到指定目录,并添加将子目录的名字添加到文件名中(不删除子目录) :param path: 需要整理的文件夹路径 """ for root, dirs, files in os.walk(path): # 循环遍历指定目录及其所有子目录 if root != path: # 只处理指定目录的子目录,不处理指定目录的根目录 for file in files: # 遍历当前目录(子目录)下的所有文件 old_name = root + "" + file # 当前文件名(修改前的文件名) new_name = path + "" + root.replace(path + "", "").replace("", "_") + "_" + file # 生成新的文件名 os.rename(old_name, new_name) # 修改文件所在路径及文件名 print("修改文件名:", old_name, "→", new_name)if __name__ == "__main__": # 批量修改文件名 filename_rename("G:电视剧The Gifted", ".中英字幕.WEBRip.AAC.720p.x264-人人影视", "") # 清除文件名中多余部分 filename_rename("G:电视剧The Gifted", ".The.Gifted.", "") # 清除文件名中多余部分 # 整理子目录中文件 filename_collation("G:研究报告")
运行结果:
作者:长行 (Python系列教程:C001)