使用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关于卷积的理解,文中有详细的代码示例,具有很好的参考价值,希望对大家有所帮助
    2023-04-04
  • Python全栈之学习JS(1)

    Python全栈之学习JS(1)

    这篇文章主要为大家介绍了Python全栈之JS,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Python中代码执行失败原因分析与解决

    Python中代码执行失败原因分析与解决

    本文将深入探讨Python代码执行失败的原因、常见的错误类型、诊断方法以及解决方案,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-10-10
  • python线性插值解析

    python线性插值解析

    这篇文章主要介绍了python线性插值解析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python爬虫之必备chardet库

    Python爬虫之必备chardet库

    这篇文章主要介绍了Python爬虫之必备chardet库,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • 基于PyQt5制作一个动态指针时钟

    基于PyQt5制作一个动态指针时钟

    这篇文章主要和大家分享如何利用Python中的PyQt5制作一个动态指针时钟来显示实时时间,文中的示例代码讲解详细,需要的可以参考一下
    2022-02-02
  • 基于python神经卷积网络的人脸识别

    基于python神经卷积网络的人脸识别

    这篇文章主要为大家详细介绍了基于python神经卷积网络的人脸识别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • django教程如何自学

    django教程如何自学

    在本篇内容里小编给大家整理了关于django教程学习流程,想自学的朋友们可以阅读下。
    2020-07-07
  • 基于python实现百度翻译功能

    基于python实现百度翻译功能

    这篇文章主要介绍了基于python实现百度翻译功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • django应用JWT(JSON Web Token)实战教程

    django应用JWT(JSON Web Token)实战教程

    在前后端分离的项目中,JWT(JSON Web Token)作为一种广泛使用的身份验证和授权机制,提供了一种安全、高效的方式来保护RESTful API,本文详细介绍了JWT的概念、优势、在Django中的应用步骤和使用方法,是构建安全、高效Web应用的有效指南
    2024-10-10

最新评论