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}")
测试成功
标签:重命名,批量,filepath,python,filename,path,directory,new,os From: https://www.cnblogs.com/Lovi/p/17498227.html