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 @ 2023-06-22 19:54  Lovi*  阅读(358)  评论(0编辑  收藏  举报