使用wxPython创建一个文件夹结构生成器

 更新时间:2024年11月14日 09:22:36   作者:winfredzhang  
这篇文章主要为大家详细介绍了如何利用 wxPython 来创建一个文件夹结构生成器,帮助大家自动化地创建文件夹和文件结构,有需要的可以了解下

你是否曾经因为需要手动创建复杂的文件夹结构而感到头疼?是不是觉得一层一层地新建文件夹,尤其是带有子文件夹和文件的文件系统结构,实在是太繁琐了?如果你经常处理项目中的文件组织,那么我为你带来了一种简单又高效的解决方案。

C:\pythoncode\new\chromesnapshoot.py

今天,我将通过一个有趣的项目展示如何利用 wxPython 来创建一个文件夹结构生成器,帮助你自动化地创建文件夹和文件结构,只需输入一个简单的描述。让我们一起探索如何通过代码生成你需要的文件系统结构吧!

全部代码

import wx
import os

class FolderStructureCreator(wx.Frame):
    def __init__(self, parent, title):
        super().__init__(parent, title=title, size=(600, 400))

        # 创建面板
        panel = wx.Panel(self)

        # 创建控件
        self.memo = wx.TextCtrl(panel, style=wx.TE_MULTILINE, size=(500, 200), pos=(50, 50))
        self.create_button = wx.Button(panel, label="创建", pos=(50, 270))
        self.folder_picker = wx.DirPickerCtrl(panel, path="", size=(500, -1), pos=(50, 300))

        # 绑定事件
        self.create_button.Bind(wx.EVT_BUTTON, self.on_create)

        self.Show()

    def on_create(self, event):
        # 获取目标文件夹路径
        target_folder = self.folder_picker.GetPath()
        if not target_folder:
            wx.MessageBox("请选择目标文件夹", "错误", wx.ICON_ERROR)
            return
        
        # 获取输入的文件夹结构描述
        folder_structure = self.memo.GetValue()
        if not folder_structure:
            wx.MessageBox("请输入文件夹结构描述", "错误", wx.ICON_ERROR)
            return
        
        # 根据文件夹结构描述创建文件夹和文件
        self.create_structure(target_folder, folder_structure)

    def create_structure(self, base_path, structure):
        lines = structure.splitlines()
        current_path = base_path

        for line in lines:
            # 处理文件夹
            if '├──' in line or '└──' in line:
                folder_name = line.strip().split('──')[-1].strip()
                new_folder_path = os.path.join(current_path, folder_name)
                if not os.path.exists(new_folder_path):
                    os.makedirs(new_folder_path)
                current_path = new_folder_path
            # 处理文件(将后缀名改为 .txt)
            elif '.' in line:  # 判断是否为文件
                file_name = line.strip()
                # 将文件名后缀改为 .txt
                file_name = os.path.splitext(file_name)[0] + '.txt'
                file_path = os.path.join(current_path, file_name)
                if not os.path.exists(file_path):
                    with open(file_path, 'w') as f:
                        f.write('')  # 创建空的 .txt 文件

            # 返回上一层文件夹
            if line.strip().startswith('└──') or line.strip().startswith('├──'):
                current_path = os.path.dirname(current_path)

        wx.MessageBox("文件夹和文件创建完成", "成功", wx.ICON_INFORMATION)


if __name__ == "__main__":
    app = wx.App(False)
    FolderStructureCreator(None, title="文件夹结构创建器")
    app.MainLoop()

项目目标

我们将创建一个图形用户界面(GUI)应用,用户可以:

输入一个描述文件夹结构的文本,例如类似于树状图的格式。

选择目标文件夹(即将创建文件夹和文件的地方)。

点击按钮后,程序自动根据描述创建相应的文件夹和文件。

开始之前的准备

要实现这个项目,我们需要使用以下工具:

wxPython:用于创建桌面 GUI,简单而强大,非常适合我们这个文件管理工具。

os:Python 的标准库,提供文件和文件夹操作接口。

项目实现

接下来,我们逐行讲解这个项目的代码,并一步步让你了解它的工作原理。

1. 导入必需的库

import wx
import os

wx 是我们用来创建图形界面的库。

os 是标准库,用来处理文件和文件夹的创建、删除等操作。

2. 创建主应用窗口

我们继承 wx.Frame 来创建一个窗口,这就是我们应用的主界面。

class FolderStructureCreator(wx.Frame):
    def __init__(self, parent, title):
        super().__init__(parent, title=title, size=(600, 400))

        # 创建面板
        panel = wx.Panel(self)

        # 创建控件
        self.memo = wx.TextCtrl(panel, style=wx.TE_MULTILINE, size=(500, 200), pos=(50, 50))
        self.create_button = wx.Button(panel, label="创建", pos=(50, 270))
        self.folder_picker = wx.DirPickerCtrl(panel, path="", size=(500, -1), pos=(50, 300))

        # 绑定事件
        self.create_button.Bind(wx.EVT_BUTTON, self.on_create)

        self.Show()

wx.Frame 是 wxPython 提供的基础窗口类。我们通过它来创建一个窗口并添加控件。

控件:

self.memo:一个多行文本框,用户可以在这里输入文件夹结构描述。

self.create_button:一个按钮,当用户点击时,程序将根据描述创建文件夹和文件。

self.folder_picker:一个文件夹选择控件,用户用它来选择目标文件夹。

3. 处理按钮点击事件

当用户点击“创建”按钮时,我们会读取文本框中的内容,并根据用户指定的路径创建文件夹和文件。

def on_create(self, event):
    # 获取目标文件夹路径
    target_folder = self.folder_picker.GetPath()
    if not target_folder:
        wx.MessageBox("请选择目标文件夹", "错误", wx.ICON_ERROR)
        return
    
    # 获取输入的文件夹结构描述
    folder_structure = self.memo.GetValue()
    if not folder_structure:
        wx.MessageBox("请输入文件夹结构描述", "错误", wx.ICON_ERROR)
        return
    
    # 根据文件夹结构描述创建文件夹和文件
    self.create_structure(target_folder, folder_structure)

我们首先检查用户是否选择了目标文件夹,若没有,弹出提示框。

然后,获取文本框中的文件夹结构描述,若为空,也弹出错误提示。

如果一切正常,调用 self.create_structure() 函数来处理文件夹结构的创建。

4. 解析文件夹结构并创建文件夹和文件

接下来,我们的 create_structure 方法负责解析用户输入的文件夹结构并实际创建文件夹和文件。

def create_structure(self, base_path, structure):
    lines = structure.splitlines()
    current_path = base_path

    for line in lines:
        # 处理文件夹
        if '├──' in line or '└──' in line:
            folder_name = line.strip().split('──')[-1].strip()
            new_folder_path = os.path.join(current_path, folder_name)
            if not os.path.exists(new_folder_path):
                os.makedirs(new_folder_path)
            current_path = new_folder_path
        # 处理文件
        elif '.' in line:
            file_name = line.strip()
            file_path = os.path.join(current_path, file_name)
            if not os.path.exists(file_path):
                with open(file_path, 'w') as f:
                    f.write('')  # 创建空文件

        # 返回上一层文件夹
        if line.strip().startswith('└──') or line.strip().startswith('├──'):
            current_path = os.path.dirname(current_path)

    wx.MessageBox("文件夹和文件创建完成", "成功", wx.ICON_INFORMATION)

分解结构:我们首先将输入的文件夹结构文本按行分割,每一行代表一个文件夹或文件。

创建文件夹:当检测到 ├── 或 └──(树状结构符号),我们认为这一行是一个文件夹,接着就创建这个文件夹。

创建文件:当行中包含文件扩展名(例如 .txt),我们认为这是一个文件,接着在当前路径下创建这个文件。

回退路径:通过检查行中的树状符号,程序会自动返回到上一级目录,确保目录结构正确。

5. 完整的代码展示

import wx
import os

class FolderStructureCreator(wx.Frame):
    def __init__(self, parent, title):
        super().__init__(parent, title=title, size=(600, 400))

        # 创建面板
        panel = wx.Panel(self)

        # 创建控件
        self.memo = wx.TextCtrl(panel, style=wx.TE_MULTILINE, size=(500, 200), pos=(50, 50))
        self.create_button = wx.Button(panel, label="创建", pos=(50, 270))
        self.folder_picker = wx.DirPickerCtrl(panel, path="", size=(500, -1), pos=(50, 300))

        # 绑定事件
        self.create_button.Bind(wx.EVT_BUTTON, self.on_create)

        self.Show()

    def on_create(self, event):
        target_folder = self.folder_picker.GetPath()
        if not target_folder:
            wx.MessageBox("请选择目标文件夹", "错误", wx.ICON_ERROR)
            return
        
        folder_structure = self.memo.GetValue()
        if not folder_structure:
            wx.MessageBox("请输入文件夹结构描述", "错误", wx.ICON_ERROR)
            return
        
        self.create_structure(target_folder, folder_structure)

    def create_structure(self, base_path, structure):
        lines = structure.splitlines()
        current_path = base_path

        for line in lines:
            if '├──' in line or '└──' in line:
                folder_name = line.strip().split('──')[-1].strip()
                new_folder_path = os.path.join(current_path, folder_name)
                if not os.path.exists(new_folder_path):
                    os.makedirs(new_folder_path)
                current_path = new_folder_path
            elif '.' in line:
                file_name = line.strip()
                file_path = os.path.join(current_path, file_name)
                if not os.path.exists(file_path):
                    with open(file_path, 'w') as f:
                        f.write('')

            if line.strip().startswith('└──') or line.strip().startswith('├──'):
                current_path = os.path.dirname(current_path)

        wx.MessageBox("文件夹和文件创建完成", "成功", wx.ICON_INFORMATION)


if __name__ == "__main__":
    app = wx.App(False)
    FolderStructureCreator(None, title="文件夹结构创建器")
    app.MainLoop()

运行结果

总结

通过这个小项目,我们学到了如何结合 wxPython 和 os 库来创建一个强大的文件夹结构生成器。只需简单的文本输入和点击按钮,我们就能自动化地生成复杂的文件夹和文件结构。你可以在日常工作中,尤其是项目管理和文档管理中,使用这个工具来快速创建文件系统结构,节省时间和精力。

到此这篇关于使用wxPython创建一个文件夹结构生成器的文章就介绍到这了,更多相关wxPython创建文件夹结构生成器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python代码实现列表分组计数

    Python代码实现列表分组计数

    这篇文章主要介绍了Python代码实现列表分组计数,利用Python代码实现了使用分组函数对列表进行分组,并计算每组的元素个数的功能,需要的朋友可以参考一下
    2021-11-11
  • Python django框架应用中实现获取访问者ip地址示例

    Python django框架应用中实现获取访问者ip地址示例

    这篇文章主要介绍了Python django框架应用中实现获取访问者ip地址,涉及Python Request模块相关函数使用技巧,需要的朋友可以参考下
    2019-05-05
  • python中sys.argv参数用法实例分析

    python中sys.argv参数用法实例分析

    这篇文章主要介绍了python中sys.argv参数用法,实例分析了python中sys.argv参数的功能、定义及使用技巧,需要的朋友可以参考下
    2015-05-05
  • Python编写判断真实文件类型工具

    Python编写判断真实文件类型工具

    常在河边走,哪能不湿鞋,网上获取的各种文件后缀真真假假,甚至一不小心就会中招,所以本文就来用Python编写一个判断真实文件类型工具吧
    2025-01-01
  • python运行脚本文件的三种方法实例

    python运行脚本文件的三种方法实例

    在计算中,脚本一词用于指代包含订单逻辑序列的文件或批处理文件,下面这篇文章主要给大家介绍了关于python运行脚本文件的三种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Python整数对象实现原理详解

    Python整数对象实现原理详解

    这篇文章主要介绍了Python整数对象实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python实现文件的备份流程详解

    python实现文件的备份流程详解

    在本篇文章中我们给大家整理了关于python实现文件的备份的详细流程步骤,有兴趣的朋友们学习下。
    2019-06-06
  • Python下应用opencv 实现人脸检测功能

    Python下应用opencv 实现人脸检测功能

    OpenCV是如今最流行的计算机视觉库,今天我们通过本文给大家分享Python下应用opencv 实现人脸检测功能,感兴趣的朋友跟随小编一起看看吧
    2019-10-10
  • Python实例方法、类方法、静态方法区别详解

    Python实例方法、类方法、静态方法区别详解

    这篇文章主要介绍了Python实例方法、类方法、静态方法区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • python实现打开手机app并点击操作

    python实现打开手机app并点击操作

    这篇文章主要介绍了python实现打开手机app并点击操作,本文分为两部分一部分是打开应用,第二部分是调式手机连接电脑,需要的朋友可以参考下
    2022-04-04

最新评论