python实现批量重命名与批量删除
python实现文件批量重命名
这里我是用正则表达式,把文件名包含“[中间是任意字母或者数字]”替换成空字符串
import os import re # 指定目录路径 directory = r"D:\\音乐" # 匹配的正则表达式 pattern = r"\[.+?\]" # 遍历目录下的文件 for filename in os.listdir(directory): # 构建完整文件路径 filepath = os.path.join(directory, filename) # 判断是否为文件 if os.path.isfile(filepath): # 判断文件名是否匹配正则表达式 if re.search(pattern, filename): print("原始文件名:", filename) # 替换匹配的部分为空字符串 new_filename = re.sub(pattern, "", filename) # 构建新的文件路径 new_filepath = os.path.join(directory, new_filename) try: # 重命名文件 os.rename(filepath, new_filepath) print("重命名后的文件名:", new_filename) except OSError as e: print(f"重命名文件 {filename} 失败:{e}")
效果。
批量重命名优化版本
- 做了界面
- 可以自定义路径
- 自定义查找替换的操作
目前实现的几个功能如下:
可以自由实现文件名替换。
批量替换文件名当中的字段
自由给文件名添加前缀或者后缀。
给文件名添加标号
在任意位置下给文件名插入制定文本内容
^.{3} // 选中前面3个字符 .{3}$ //选中后面3个字符(不忽略.jpg等格式) .{3}(?=\.[^.]+$) //选中后边3个字符(忽略后缀) \g<0>XYZ //在选中的位置后面插入XYZ
运行界面:
import os import re import tkinter as tk def replace_files(): # 获取用户输入的查找和替换的正则表达式 find_regex = find_entry.get() replace_regex = replace_entry.get() # 默认替换为空字符串 if not replace_regex: replace_regex = "" # 获取用户输入的源代码路径 directory = directory_entry.get() # 判断路径是否存在 if not os.path.exists(directory): print("路径不存在!") return # 遍历目录下的文件 for filename in os.listdir(directory): # 构建完整文件路径 filepath = os.path.join(directory, filename) # 判断是否为文件 if os.path.isfile(filepath): # 判断文件名是否匹配查找正则表达式 if re.search(find_regex, filename): print("原始文件名:", filename) # 替换匹配的部分 new_filename = re.sub(find_regex, replace_regex, filename) # 构建新的文件路径 new_filepath = os.path.join(directory, new_filename) try: # 重命名文件 os.rename(filepath, new_filepath) print("重命名后的文件名:", new_filename) except OSError as e: print(f"重命名文件 {filename} 失败:{e}") def add_serial_number(): # 获取用户输入的源代码路径 directory = directory_entry.get() # 判断路径是否存在 if not os.path.exists(directory): print("路径不存在!") return # 初始化序号 serial_number = 1 # 遍历目录下的文件 for filename in os.listdir(directory): # 构建完整文件路径 filepath = os.path.join(directory, filename) # 判断是否为文件 if os.path.isfile(filepath): # 在文件名前面添加序号 new_filename = add_serial_number_prefix(directory, filename, serial_number) # 构建新的文件路径 new_filepath = os.path.join(directory, new_filename) try: # 重命名文件 os.rename(filepath, new_filepath) print("重命名后的文件名:", new_filename) # 序号自增 serial_number += 1 except OSError as e: print(f"重命名文件 {filename} 失败:{e}") def add_serial_number_prefix(directory, filename, serial_number): basename, extension = os.path.splitext(filename) new_filename = f"({serial_number}) - {basename}{extension}" while os.path.exists(os.path.join(directory, new_filename)): serial_number += 1 new_filename = f"({serial_number}) - {basename}{extension}" return new_filename def cancel(): window.destroy() # 创建主窗口 window = tk.Tk() window.title("文件名批量替换") # 创建路径标签和输入框 directory_label = tk.Label(window, text="文件路径:") directory_label.pack() directory_entry = tk.Entry(window) directory_entry.pack() # 创建查找标签和输入框 find_label = tk.Label(window, text="查找正则表达式:") find_label.pack() find_entry = tk.Entry(window) find_entry.pack() # 创建替换标签和输入框 replace_label = tk.Label(window, text="替换正则表达式(可选):") replace_label.pack() replace_entry = tk.Entry(window) replace_entry.pack() # 创建按钮 button_frame = tk.Frame(window) button_frame.pack() run_button = tk.Button(button_frame, text="运行", command=replace_files) run_button.pack(side=tk.LEFT) cancel_button = tk.Button(button_frame, text="取消", command=cancel) cancel_button.pack(side=tk.LEFT) # 创建添加序号按钮 serial_button = tk.Button(window, text="添加序号", command=add_serial_number) serial_button.pack() # 运行主循环 window.mainloop()
文件批量删除(永久删除)
扩展:那我肯定可以把之前下载过的包括“wyf"的文件批量删除呀!
所以继续!
import os # 指定目录路径 directory = r"D:\\音乐" # 遍历目录下的文件 for filename in os.listdir(directory): # 构建完整文件路径 filepath = os.path.join(directory, filename) # 判断是否为文件 if os.path.isfile(filepath): # 判断文件名是否包含指定内容 if "吴亦凡" in filename: try: # 删除文件 os.remove(filepath) print("已删除文件:", filename) except OSError as e: print(f"删除文件 {filename} 失败:{e}")
测试成功。(需要注意,有一定的危险性,因为直接永久删除了,回收站都没进)
文件批量移动到回收站
因此优化一下(需要移动到回收站,而不是直接删除)
import os from send2trash import send2trash # 指定目录路径 directory = r"D:\音乐\测试音乐" # 遍历目录下的文件 for filename in os.listdir(directory): # 构建完整文件路径 filepath = os.path.join(directory, filename) # 判断是否为文件 if os.path.isfile(filepath): # 判断文件名是否包含指定内容 if "吴亦凡" in filename: try: # 移动文件到回收站 send2trash(filepath) print("已将文件移动到回收站:", filename) except OSError as e: print(f"移动文件 {filename} 到回收站失败:{e}")
测试成功
额外学习到的(让他人使用你的python工具)
给没有python环境的人使用你开发的python软件。
可以将 Python 程序打包成可执行文件。
-
使用文本编辑器打开你的 Python 程序,并将其保存为
.py
文件(例如,rename_music.py
)。 -
安装 PyInstaller(一个常用的打包工具):打开命令行终端,运行以下命令:
pip install pyinstaller -
在命令行终端中,导航到保存了你的 Python 程序的目录。
-
执行以下命令来生成可执行文件:
pyinstaller --onefile rename_music.py 这将在当前目录下生成一个
dist
文件夹,并在其中包含一个可执行文件(可能在 Windows 上为rename_music.exe
)。 -
将生成的可执行文件(如
rename_music.exe
)复制到你的 Windows 10 目录下的D:\音乐\
目录。 -
双击运行可执行文件,它将执行程序中的操作并对目录下的音乐文件进行批量重命名。
使用这种方式运行 Python 程序,无需在本地安装 Python 环境,只需拥有可执行文件即可。
把对应的exe分享给他人即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通