使用 Python 和 wxPython 进行批量文件扩展名替换

引言:

在日常的文件管理中,有时我们需要将一大批文件的扩展名进行替换。手动一个个重命名文件是一项繁琐的任务,但是使用 Python 编程语言和 wxPython 模块可以轻松地实现这一功能。本文将介绍如何使用 Python 和 wxPython 创建一个简单的图形界面应用程序,使用户能够选择文件夹、输入要替换的文件类型和新的文件类型,并实现批量替换文件扩展名的功能。

C:\pythoncode\new\BatchRenameExt.py

目录:

  1. 简介
  2. 准备工作
  3. 创建图形界面应用程序
  4. 批量替换文件扩展名的实现
  5. 运行和测试
  6. 总结

1. 简介

文件扩展名的替换是一项常见的文件管理任务。通过编写一个小型的图形界面应用程序,我们可以让用户方便地选择文件夹和指定要替换的文件类型以及新的文件类型,然后自动进行批量替换操作。本文将使用 Python 编程语言和 wxPython 模块实现这一功能。

2. 准备工作

在开始之前,请确保你的计算机上已经安装了 Python 和 wxPython 模块。可以使用 pip 命令来安装 wxPython:pip install wxPython

3. 创建图形界面应用程序

首先,我们需要创建一个图形界面应用程序,以便用户可以进行交互。我们将使用 wxPython 模块来创建界面。在 Python 脚本中,导入 wx 模块并创建一个继承自 wx.Frame 的类,用于承载我们的界面元素。

python 复制代码
import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super(MyFrame, self).__init__(parent, title=title, size=(400, 200))
        
        # 创建界面元素
        panel = wx.Panel(self)
        folder_picker = wx.DirPickerCtrl(panel, style=wx.DIRP_DIR_MUST_EXIST)
        extension_input = wx.TextCtrl(panel)
        new_extension_input = wx.TextCtrl(panel)
        replace_btn = wx.Button(panel, label="替换")
        
        # 绑定事件处理函数
        replace_btn.Bind(wx.EVT_BUTTON, self.on_replace)
        
        # 布局界面元素
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(wx.StaticText(panel, label="文件夹:"), 0, wx.ALL, 5)
        sizer.Add(folder_picker, 0, wx.EXPAND|wx.ALL, 5)
        sizer.Add(wx.StaticText(panel, label="文件类型:"), 0, wx.ALL, 5)
        sizer.Add(extension_input, 0, wx.EXPAND|wx.ALL, 5)
        sizer.Add(wx.StaticText(panel, label="新的文件类型:"), 0, wx.ALL, 5)
        sizer.Add(new_extension_input, 0, wx.EXPAND|wx.ALL, 5)
        sizer.Add(replace_btn, 0, wx.ALIGN_CENTER|wx.ALL, 5)
        panel.SetSizer(sizer)
        
        self.Show()

4. 批量替换文件扩展名的实现

下一步是实现批量替换文件扩展名的功能。我们将通过遍历选定的文件夹和文件,将指定的文件类型的文件扩展名替换为新的文件类型。

python 复制代码
import os

# ...

class MyFrame(wx.Frame):
    # ...
    
    def on_replace(self, event):
        path = self.folder_picker.GetPath()
        old_extension = self.extension_input.GetValue().strip().lower()
        new_extension = self.new_extension_input.GetValue().strip().lower()
        
        if path and old_extension and new_extension:
            for root, dirs, files in os.walk(path):
                for file in files:
                    file_name, extension = os.path.splitext(file)
                    if extension.lower() == old_extension:
new_file = file_name + new_extension
                        old_file_path = os.path.join(root, file)
                        new_file_path = os.path.join(root, new_file)
                        os.rename(old_file_path, new_file_path)

在上述代码中,我们首先获取用户输入的文件夹路径、要替换的文件类型和新的文件类型。然后,我们使用 os.walk 函数遍历选定的文件夹及其子文件夹中的所有文件。对于每个文件,我们检查其扩展名是否与要替换的文件类型匹配,如果匹配,则构造新的文件名,并使用 os.rename 函数将文件重命名为新的文件名。

5. 全部代码

python 复制代码
import os
import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super(MyFrame, self).__init__(parent, title=title, size=(400, 200))
        
        panel = wx.Panel(self)
        
        self.folder_picker = wx.DirPickerCtrl(panel, style=wx.DIRP_DIR_MUST_EXIST)
        self.extension_input = wx.TextCtrl(panel)
        self.new_extension_input = wx.TextCtrl(panel)
        replace_btn = wx.Button(panel, label="替换")
        
        replace_btn.Bind(wx.EVT_BUTTON, self.on_replace)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(wx.StaticText(panel, label="文件夹:"), 0, wx.ALL, 5)
        sizer.Add(self.folder_picker, 0, wx.EXPAND|wx.ALL, 5)
        sizer.Add(wx.StaticText(panel, label="文件类型:"), 0, wx.ALL, 5)
        sizer.Add(self.extension_input, 0, wx.EXPAND|wx.ALL, 5)
        sizer.Add(wx.StaticText(panel, label="新的文件类型:"), 0, wx.ALL, 5)
        sizer.Add(self.new_extension_input, 0, wx.EXPAND|wx.ALL, 5)
        sizer.Add(replace_btn, 0, wx.ALIGN_CENTER|wx.ALL, 5)
        panel.SetSizer(sizer)
        
        self.Show()
    
    def on_replace(self, event):
        path = self.folder_picker.GetPath()
        old_extension = self.extension_input.GetValue().strip().lower()
        new_extension = self.new_extension_input.GetValue().strip().lower()
        
        if path and old_extension and new_extension:
            for root, dirs, files in os.walk(path):
                for file in files:
                    file_name, extension = os.path.splitext(file)
                    if extension.lower() == old_extension:
                        new_file = file_name + new_extension
                        old_file_path = os.path.join(root, file)
                        new_file_path = os.path.join(root, new_file)
                        os.rename(old_file_path, new_file_path)
        
        wx.MessageBox("替换完成!", "提示", wx.OK|wx.ICON_INFORMATION)

if __name__ == "__main__":
    app = wx.App()
    frame = MyFrame(None, title="文件扩展名替换")
    app.MainLoop()

6. 总结

本文介绍了如何使用 Python 编程语言和 wxPython 模块创建一个图形界面应用程序,用于批量替换文件扩展名。通过选择文件夹、输入要替换的文件类型和新的文件类型,用户可以轻松地批量重命名文件的扩展名。这个示例展示了如何利用 Python 的强大功能和第三方库来简化日常的文件管理任务。

相关推荐
这里有鱼汤1 小时前
再见 Matplotlib!Plotly 让我在年初汇报封神
后端·python
处女座_三月1 小时前
大模型架构记录13【hr agent】
人工智能·python·深度学习·langchain
这里有鱼汤1 小时前
一学就会!Python链式编程,轻松优化你的代码
后端·python
带娃的IT创业者1 小时前
《Python Web部署应知应会》No2:如何基于FastAPI 和 OLLAMA 架构实现高并发 AI 推理服务
python·架构·flask·fastapi
databook2 小时前
『Plotly实战指南』--饼图绘制高级篇
python·数据分析·数据可视化
Edward-tan2 小时前
Django接入 免费的 AI 大模型——讯飞星火(2025年4月最新!!!)
后端·python·django
AI视觉网奇2 小时前
最小二乘求解器lstsq,处理带权重和L2正则的线性回归
pytorch·python·线性回归
起个破名想半天了3 小时前
python实现股票数据可视化
python·数据分析·股票数据可视化·poltly
溯源0064 小时前
vscode调试python(transformers库的llama为例)
vscode·python·llama
taoqick7 小时前
PyTorch DDP流程和SyncBN、ShuffleBN
人工智能·pytorch·python