首页 > 编程语言 >python实现批量重命名与批量删除

python实现批量重命名与批量删除

时间:2023-06-22 20:00:10浏览次数:36  
标签:重命名 批量 filepath python filename path directory new os

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


标签:重命名,批量,filepath,python,filename,path,directory,new,os
From: https://www.cnblogs.com/Lovi/p/17498227.html

相关文章

  • 安装Python
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]专题目录安装Python一、查询是否安装了Python及安装路径#查看当前Python版本python--versionPython2.7.16#查看当前所有Python版本路径appledeMBP:~apple$whichpython2.7/usr/lo......
  • 安装Python
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]专题目录安装Python一、查询是否安装了Python及安装路径#查看当前Python版本python--versionPython2.7.16#查看当前所有Python版本路径appledeMBP:~apple$whichpython2.7/usr/lo......
  • MacBook 搭建python开发环境
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]专题目录MacBook搭建python开发环境一、需要安装的软件安装Python安装pip安装Virtualenv安装VSCodeVSCode安装Python扩展插件安装PyCharm二、IDE搭配VSCode+Python+pip+Virtuale......
  • 基于python的 Web 开发框架学习笔记
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]专题目录基于python的Web开发框架学习笔记详细记录Eword的python入门过程IDE环境推荐#【推荐】VSCode+Python+pip+Virtualenv或#【可选】PyCharm+Python+pip+Virtualenv......
  • 基于python的 Web 开发框架学习笔记
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]专题目录基于python的Web开发框架学习笔记详细记录Eword的python入门过程IDE环境推荐#【推荐】VSCode+Python+pip+Virtualenv或#【可选】PyCharm+Python+pip+Virtualenv......
  • Python基础
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]专题目录Python基础占个位置......
  • Python基础
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]专题目录Python基础占个位置......
  • 关于python学习笔记
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]关于python学习笔记详细记录Eword的python入门过程IDE环境推荐#【推荐】VSCode+Python+pip+Virtualenv或#【可选】PyCharm+Python+pip+Virtualenv......
  • 关于python学习笔记
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]关于python学习笔记详细记录Eword的python入门过程IDE环境推荐#【推荐】VSCode+Python+pip+Virtualenv或#【可选】PyCharm+Python+pip+Virtualenv......
  • Python学习笔记专题目录
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]学习笔记专题目录首页Python学习笔记MacBook搭建python开发环境【必须】安装Python【必须】安装pip【必须】virtualenv的安装和使用【推荐】安装PyCharm【推荐】Pycharm虚拟环境......