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}")

效果。

image-20230621140226085

批量重命名优化版本

  • 做了界面
  • 可以自定义路径
  • 自定义查找替换的操作

目前实现的几个功能如下:

可以自由实现文件名替换。

批量替换文件名当中的字段

自由给文件名添加前缀或者后缀。

给文件名添加标号

在任意位置下给文件名插入制定文本内容

^.{3} // 选中前面3个字符
.{3}$ //选中后面3个字符(不忽略.jpg等格式)
.{3}(?=\.[^.]+$) //选中后边3个字符(忽略后缀)
\g<0>XYZ //在选中的位置后面插入XYZ

运行界面:

image-20230622195021795

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}")

测试成功。(需要注意,有一定的危险性,因为直接永久删除了,回收站都没进)

image-20230622193501145

文件批量移动到回收站

因此优化一下(需要移动到回收站,而不是直接删除)

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}")

测试成功

image-20230622194328599

image-20230622195914189


额外学习到的(让他人使用你的python工具)

给没有python环境的人使用你开发的python软件。

可以将 Python 程序打包成可执行文件。

  1. 使用文本编辑器打开你的 Python 程序,并将其保存为 .py 文件(例如,rename_music.py)。

  2. 安装 PyInstaller(一个常用的打包工具):打开命令行终端,运行以下命令:

    pip install pyinstaller
  3. 在命令行终端中,导航到保存了你的 Python 程序的目录。

  4. 执行以下命令来生成可执行文件:

    pyinstaller --onefile rename_music.py

    这将在当前目录下生成一个 dist 文件夹,并在其中包含一个可执行文件(可能在 Windows 上为 rename_music.exe)。

  5. 将生成的可执行文件(如 rename_music.exe)复制到你的 Windows 10 目录下的 D:\音乐\ 目录。

  6. 双击运行可执行文件,它将执行程序中的操作并对目录下的音乐文件进行批量重命名。

使用这种方式运行 Python 程序,无需在本地安装 Python 环境,只需拥有可执行文件即可。

image-20230622200140766

image-20230622200155027

把对应的exe分享给他人即可。

posted @   Lovi*  阅读(425)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示