python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > wxPython创建文件夹结构生成器

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

作者: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创建文件夹结构生成器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文