使用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 50行爬虫抓取并处理图灵书目过程详解

    Python 50行爬虫抓取并处理图灵书目过程详解

    这篇文章主要介绍了Python 50行爬虫抓取并处理图灵书目过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python的Pandas时序数据详解

    Python的Pandas时序数据详解

    这篇文章主要为大家详细介绍了Pandas时序数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 在Python中pandas.DataFrame重置索引名称的实例

    在Python中pandas.DataFrame重置索引名称的实例

    今天小编就为大家分享一篇在Python中pandas.DataFrame重置索引名称的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 解决使用openpyxl时遇到的坑

    解决使用openpyxl时遇到的坑

    这篇文章主要介绍了解决使用openpyxl时遇到的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • python中 conda 虚拟环境管理和jupyter内核管理

    python中 conda 虚拟环境管理和jupyter内核管理

    这篇文章主要介绍了python中 conda 虚拟环境管理和jupyter内核管理,文章基于pyhton以及conda的虚拟环境创建、删除、jupyter添加、删除虚拟kernel的方法,需要的朋友可以参考一下
    2022-04-04
  • python读写json文件的简单实现

    python读写json文件的简单实现

    这篇文章主要介绍了python读写json文件的简单实现,实例分析了各种读写json的方法和技巧,有兴趣的可以了解一下
    2017-04-04
  • 初学python数组的处理代码

    初学python数组的处理代码

    初学python数组的处理代码,学习python的朋友可以参考下。
    2011-01-01
  • Python实现计算两个指定日期相差几年几月几日

    Python实现计算两个指定日期相差几年几月几日

    这篇文章主要为大家详细介绍了如何使用Python实现计算两个日期之间相差多少年,多少月,多少天,文中的的示例代码讲解详细,需要的可以参考下
    2024-02-02
  • python的函数参数你了解吗

    python的函数参数你了解吗

    这篇文章主要为大家详细介绍了python的函数参数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Python将Excel表格按某列拆分为多个sheet实现过程

    Python将Excel表格按某列拆分为多个sheet实现过程

    这篇文章主要为大家介绍了Python实现将Excel表格按某列拆分为多个sheet,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05

最新评论