当前位置: 首页 > article >正文

使用Python创建文件夹结构生成器

在本文中,我们将探讨如何利用Python的wxPython库来创建一个图形用户界面(GUI)应用程序,该应用程序允许用户通过简单的文本输入来创建复杂的文件夹结构。这个程序将包括一个文本框用于输入文件夹结构描述,一个按钮来触发结构创建过程,以及一个目录选择器来指定目标文件夹。
C:\pythoncode\new\chromesnapshoot.py

全部代码

import wx
import os
import re

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()
        path_stack = [base_path]  # 初始化路径栈

        for line in lines:
            # 使用正则表达式移除符号
            clean_line = re.sub(r'[├└│─]+', '', line).strip()

            # 跳过空行
            if not clean_line:
                continue

            indent_level = len(line) - len(line.lstrip(' '))  # 计算缩进级别
            while len(path_stack) > indent_level + 1:
                path_stack.pop()  # 回退到正确的父路径

            if clean_line.endswith('/'):
                # 创建文件夹
                folder_name = clean_line.rstrip('/')
                new_folder_path = os.path.join(path_stack[-1], folder_name)
                if not os.path.exists(new_folder_path):
                    os.makedirs(new_folder_path)
                path_stack.append(new_folder_path)
            elif '.' in clean_line:
                # 创建文件
                file_name = clean_line
                new_file_path = os.path.join(path_stack[-1], file_name)
                try:
                    with open(new_file_path, 'w') as f:
                        f.write('')  # 创建空文件
                except PermissionError as e:
                    wx.MessageBox(f"权限错误,无法创建文件:{new_file_path}\n{str(e)}", "错误", wx.ICON_ERROR)
                    return

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


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

步骤1:安装wxPython

首先,你需要在你的Python环境中安装wxPython库。你可以通过pip安装它:

pip install wxPython

步骤2:创建主窗口类

接下来,我们定义一个名为FolderStructureCreator的类,该类继承自wx.Frame。在这个类的构造函数中,我们设置窗口的大小和标题,并初始化各种控件(如文本框、按钮和目录选择器)。

import wx
import os
import re

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()

步骤3:实现创建功能

on_create方法中,我们获取用户输入的目标文件夹路径和文件夹结构描述,然后调用create_structure方法来实际创建文件夹和文件。

    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)

步骤4:解析文件夹结构描述并创建文件夹/文件

create_structure方法负责解析用户输入的文件夹结构描述,并根据这些信息在指定的基路径下创建相应的文件夹和文件。

    def create_structure(self, base_path, structure):
        lines = structure.splitlines()
        path_stack = [base_path]
        
        for line in lines:
            clean_line = re.sub(r'[├└│─]+', '', line).strip()
            if not clean_line:
                continue
            
            indent_level = len(line) - len(line.lstrip(' '))
            while len(path_stack) > indent_level + 1:
                path_stack.pop()
            
            if clean_line.endswith('/'):
                folder_name = clean_line.rstrip('/')
                new_folder_path = os.path.join(path_stack[-1], folder_name)
                if not os.path.exists(new_folder_path):
                    os.makedirs(new_folder_path)
                path_stack.append(new_folder_path)
            elif '.' in clean_line:
                file_name = clean_line
                new_file_path = os.path.join(path_stack[-1], file_name)
                try:
                    with open(new_file_path, 'w') as f:
                        f.write('')
                except PermissionError:
                    wx.MessageBox("权限不足,无法创建文件", "错误", wx.ICON_ERROR)

运行结果

在这里插入图片描述

在这里插入图片描述

以上就是如何使用Python和wxPython创建一个文件夹结构生成器的完整指南。这个工具可以大大简化在文件系统中组织和管理文件的过程,特别是对于需要快速建立复杂文件夹结构的开发人员来说非常有用。


http://www.kler.cn/a/471493.html

相关文章:

  • Flink系统知识讲解之:如何识别反压的源头
  • doris:远程存储
  • TCP 如何获取端口信息
  • 【计算机视觉】单目深度估计模型-Depth Anything-V2
  • VR+智慧消防一体化决策平台
  • 30、论文阅读:基于小波的傅里叶信息交互与频率扩散调整的水下图像恢复
  • .NET Core 对象分配(Alloc)底层原理浅谈
  • 【论文阅读笔记】MoGe: 使用最优训练监督解锁开放域图像的精确单目几何估计
  • 【Java】——方法
  • 网络安全的学习与实践经验(附资料合集)
  • 深入Android架构(从线程到AIDL)_16 应用Android的UI框架03
  • NVIDIA发布RTX 50系列显卡:性能飞跃,Blackwell架构引领新时代
  • Vue.js组件开发-实现图表数据动态展示
  • 继承(5)
  • Qt: 无法运行rc.exe
  • PyTorch 官方文档 中文版本
  • Axure PR 9 锚点定位滚动 设计交互
  • IP查询于访问控制保护你我安全
  • 虚拟机Linux Red Hat 7.9 Docker部署.Net 7 Zr.Admin项目(后端)
  • nfs开机自动挂载
  • 《Mcal》--MCU模块
  • HTML-多媒体标签
  • TypeScript语言的正则表达式
  • 区别:支持向量机 (SVM) 和逻辑回归
  • Flink概念知识讲解之:Restart重启策略配置
  • Python如何导入自定义的类