【Python】自动化构建项目结构样式

news2024/11/15 16:53:11

在这里插入图片描述

引言

在使用Python或者其它编程语言的项目时候,编写README.md 往往是不可或缺的;

而在README.md 中,关于项目结构的样式展示,这个是可选的。不展示也无伤大雅,但有展示的话,有以下优点:

  • 提供清晰的项目导航:包含项目结构的文字样式可以让读者快速了解项目的组织方式和文件结构。这对于新加入的开发人员或用户来说尤为重要,他们可以迅速找到所需的文件和模块,并理解它们之间的关系。

但是怎么去编写这个项目结构的样式,却很令人头疼。

手动编写和更新这些结构可能会变得很繁琐和容易出错。因此,有自动生成项目结构文字样式的工具或脚本可以极大地简化这个过程,提高效率并减少错误。

所以本文就是来解决这一痛点!!!


展示

应该没有人不心动吧!!!

下面使用笔者的一个PySide6/PyQT开发的一个项目的项目结构来作展示。

一个Python写的游戏辅助小工具。适用于 咸鱼之王后台挂机、鼠标连击等。

看以下动图展示:

在这里插入图片描述

再来看下面的截图,

在这里插入图片描述

知识点📖📖

模块作用
osos 模块提供了非常丰富的方法用来处理文件和目录

安装依赖

  • 免安装,Python内置

导入模块

import os



主要使用到了os 模块的几个方法,如下(它们在处理文件和目录时非常有用,可以帮助你进行路径操作和文件系统操作):

使用这些函数可以更方便地处理文件路径和目录操作。

  • os.path.join用于安全地连接路径
  • os.path.isdir用于检查路径是否为目录
  • os.path.basename用于提取路径的最后一部分
  • os.getcwd用于获取当前工作目录。
函数解释
os.listdir(path)返回path指定的文件夹包含的文件或文件夹的名字的列表
os.path.join(path, *paths)将多个路径组合成一个完整的路径。根据操作系统的规则处理路径分隔符。
os.path.isdir(path)判断给定的路径是否是一个目录。如果是目录,返回True;否则返回False
os.path.basename(path)返回路径中的最后一部分,即文件名或目录名。如果路径以斜杠结尾,则返回空字符串。
os.getcwd()获取当前工作目录的路径。当前工作目录是程序运行时所在的目录。

为什么是自动化构建项目结构样式

基于以下的好处和作用,读者朋友又有什么理由会拒绝这份宝藏代码呢!!!

好处

通过使用自动生成项目结构文字样式的工具,可以轻松地生成项目的目录结构,并将其插入到README.md文件中。好处如下:

  1. 节省时间和精力:手动编写和更新项目结构的文字样式可能会很耗时且容易出错。自动生成工具可以快速而准确地生成项目结构,节省了手动处理的时间和精力。
  2. 保持一致性:自动生成工具可以确保项目结构的文字样式始终保持一致。无论项目如何演变和更新,都可以轻松地更新项目结构,以反映最新的变化,而无需手动更改README.md文件。
  3. 易于维护:通过自动生成工具生成的项目结构文字样式,可以更容易地进行维护和更新。当项目的文件或目录发生变化时,只需重新运行自动生成工具,即可更新README.md中的项目结构,而无需手动修改和调整。
  4. 提供清晰的项目导航:包含项目结构的文字样式可以让读者快速了解项目的组织方式和文件结构。这对于新加入的开发人员或用户来说尤为重要,他们可以迅速找到所需的文件和模块,并理解它们之间的关系。

综上所述,通过自动生成项目结构文字样式,可以简化编写README.md的过程,提高文档的一致性和可维护性,并为项目的使用者提供清晰的导航和理解。这样的工具可以帮助开发者更专注于项目的开发和功能实现,而不必过多关注文档的细节和更新。

作用

自动化构建项目结构样式在 Python 项目中具有以下作用:

  1. 项目文档:生成项目结构的文字样式可以作为项目文档的一部分,提供项目的概览和文件组织结构的信息。它可以帮助新加入的开发人员快速了解项目的组织和文件分布。
  2. 代码说明:项目结构文字样式可以与代码注释一起使用,对各个模块、包和文件进行说明。这有助于其他开发人员更好地理解代码的组织方式,快速找到所需的文件和模块。
  3. 项目展示:在项目演示或展示的过程中,使用项目结构文字样式可以直观地展示项目的文件和文件夹结构。这样可以帮助观众更好地理解项目的组织方式,并对项目的规模和复杂度有一个直观的认识。

总之,生成项目结构的文字样式可以在项目文档、代码说明和项目展示中提供清晰的项目结构信息,帮助开发人员更好地理解和使用项目。

代码

  • 递归地遍历指定目录下的文件和文件夹,并按照特定的格式输出它们的结构。
# -*- coding: utf-8 -*-
# @Author : Frica01
# @Time   : 2023-06-22 0:00
# @Name   : project_structure_generator.py

import os

# 需要排除的文件夹列表
exclude_folders = ['.git', '.idea', '.vscode', 'venv', '__pycache__', 'project_structure_generator.py']


def generate_project_structure(directory, indent='', is_last=False, is_root=False, output_file=None):
    """
    生成项目结构的文字样式

    Args:
        directory (str): 目录路径
        indent (str): 缩进字符串
        is_last (bool): 是否是最后一个元素
        is_root (bool): 是否是根目录
        output_file (file): 输出文件对象

    Returns:
        None
    """
    # 获取目录中的文件和文件夹列表,并按照一定的规则排序

    items = sorted(os.listdir(directory),
                   key=lambda x: (not os.path.isdir(os.path.join(directory, x)), x != '__init__.py', x))
    num_items = len(items)

    if is_root:
        # 根目录名称
        output_file.write(f"{os.path.basename(os.getcwd())}/\n")

    for i, item in enumerate(items):
        if item in exclude_folders:
            continue

        item_path = os.path.join(directory, item)
        is_item_last = i == num_items - 1

        if os.path.isdir(item_path):
            # 如果是目录,则添加目录标记并递归生成目录结构
            marker = '└── ' if is_item_last else '├── '
            output_file.write(f"{indent}{marker}{item}/\n")
            new_indent = indent + ('    ' if is_last else '│   ')
            generate_project_structure(item_path, new_indent, is_item_last, output_file=output_file)
        else:
            # 如果是文件,则添加文件标记
            marker = '└── ' if is_item_last else '├── '
            output_file.write(f"{indent}{marker}{item}\n")


if __name__ == '__main__':
    # 打开要写入的文件
    with open('project_structure.txt', 'w') as file:
        # 生成项目结构并写入文件
        generate_project_structure('.', is_root=True, output_file=file)

    print("目录结构已写入文件 project_structure.txt")

结语

在项目开发过程中,一个良好的项目结构对于团队的协作和代码的可维护性起着重要作用。通过使用自动生成项目结构文字样式的工具,如我们在代码中实现的 project_structure_generator.py,我们可以轻松地生成项目结构的可视化表示,并将其整理为一个文本文件。这个工具不仅节省了手动编写项目结构的麻烦,还确保了结构的一致性和准确性。

先这样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/674092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第九章 总结及作业(4)【编译原理】

第九章 总结及作业(4)【编译原理】 前言推荐第九章 运行时存储空间组织9.1 目标程序运行时的活动9.1.1过程的活动9.1.2参数传递 9.2 运行时存储器的划分9.2.1运行时存储器的划分9.2.2 活动记录9.2.3 存储分配策咯 9.3 静态存储分配9.3.1数据区*9.3.2公用…

基于深度学习的人脸检测技术

用到环境 1、pycharm community edition 2022.3.2 2、Python 3.10 整篇内容都已上传至我的csdn资源中,想用的请移步。 流程 多任务级联卷积神经网络(Multi-task Cascaded Convolutional Networks, MTCNN)算法进行人脸检测 普通人脸检测 单人人脸检测 图1 单人人…

我最喜欢的编程语言是python,以及我的见解!!

这里写目录标题 我最喜欢的编程语言:1、我个人认为编程语言优劣的评选标准2、我对不同编程语言的优点与缺点的拙见**1. Java****2. Python****3. JavaScript****4. C语言:****5. C语言:** 3、对python编程语言未来发展的猜测和未来趋势 我最喜…

Vicuna-13B使用云服务器部署

Vicuna概述 Vicuna由一群主要来自加州大学伯克利分校的研究人员推出,仍然是熟悉的配方、熟悉的味道。Vicuna同样是基于Meta开源的LLaMA大模型微调而来,它的训练数据是来自ShareGPT上的7万多条数据(ShareGPT一个分享ChatGPT对话的谷歌插件&am…

kerberos配置dolphinscheduler

kerberos配置dolphinscheduler 一、添加dolphin 用戶1.所有節點上執行如下命令: 二、DolphinScheduler集群模式部署1.集群规划2.前置准备工作3.解压DolphinScheduler安装包4. 创建元数据库及用户5. 配置一键部署脚本6 初始化数据库7.修改common配置文件8. 一键部署D…

华为、思科和瞻博网络三个厂商如何配置基本ACL和高级ACL?

今天给大家带来基本ACL和高级ACL的配置,主要会介绍三个厂商的配置: 其他厂商也可以参考,比如华三的可以参考华为的,锐捷的参考思科的。 1. 基本ACL配置 基本ACL(Access Control List)是一种简单的网络安全…

【Java高级语法】(十二)可变参数:Java中的“可变之美“,做好这些细节,你的程序强大又灵活~

Java高级语法详解之可变参数 🔹 前言1️⃣ 概念2️⃣ 优势和缺点3️⃣ 特征和应用场景3.1 特征3.2 应用场景 4️⃣ 使用和原理5️⃣ 使用技巧5.1 可变参数结合泛型5.2 使用元组或列表进行参数传递5.3 使用默认值5.4 缓存计算结果 6️⃣ 实战:构建动态日志…

【Vue3+Ts project】认识 Websocket 以及 socket.io 库

目录 Websocket socket.io Socket.iO 事件名总结: Socket.IO 方法总结 Websocket 作用: WebSocket 仍然提供实时的双向通信功能,使用Vue3 应用程序能够与服务器进行实时数据交换降低延迟和网络开销:相比传统的HTTP请求-响…

scratch lenet(7): C语言计算可学习参数数量和连接数量

scratch lenet(7): C语言计算可学习参数数量和连接数量 1. 目的 按照 LeNet-5 对应的原版论文 LeCun-98.pdf 的网络结构,算出符合原文数据的“网络每层可学习参数数量、连接数量”。 网络上很多人的 LeNet-5 实现仅仅是 “copy” 现有的别人的项目, 缺…

求2的N次幂(C++)解决高精度运算

​👻内容专栏:《C/C专栏》 🐨本文概括: 计算高精度的2的N次方数字。 🐼本文作者:花 碟 🐸发布时间:2023.6.22 文章目录 ​前言求2的N次方,N ≤ 10000实现思路&#xff1a…

SpringBoot 如何使用 @PathVariable 进行数据校验

SpringBoot 如何使用 PathVariable 进行数据校验 在 SpringBoot 项目中,我们经常需要从 URL 中获取参数并进行相关的数据校验。而 PathVariable 注解就是一种非常方便的方式,可以让我们在方法参数中直接获取 URL 中的参数,并进行数据校验。本…

基于python开发实现数学中各种经典曲线的可视化

今天正好有点时间就想着把之前零星时间里面做的一点小东西整合一下梳理出来,本文的核心目的就是想要基于python来开发实现各种有趣的数学曲线的可视化展示。 笛卡尔心形线 笛卡尔心形线是一种二维平面曲线,由法国数学家笛卡尔在17世纪提出。它得名于其…

基于springboot+Redis的前后端分离项目(三)-【黑马点评】

🎁🎁资源文件分享 链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码:eh11 优惠券秒杀 优惠券秒杀1 -全局唯一ID2 -Redis实现全局唯一Id3 添加优惠卷4 实现秒杀下单5 库存超卖问题分析6 优惠券秒杀-一人一单…

Spring Boot 异常处理的主要特点

Spring Boot 异常处理的主要特点 在 Web 应用程序中,异常处理是非常重要的一部分。在 Spring Boot 中,异常处理是非常简单和灵活的。本文将介绍 Spring Boot 异常处理的主要特点,并提供一些示例代码来帮助您更好地理解。 异常处理的主要特点…

王道计算机网络学习笔记(1)——计算机网络基本知识

前言 文章中的内容来自B站王道考研计算机网络课程,想要完整学习的可以到B站官方看完整版。 一:计算机网络基本知识 1.1.1:认识计算机网络 计算机网络的功能 网络把许多计算机连接在一起,而互联网则将许多网络连接在一起&#x…

第一章JavaScript简介

第一章JavaScript简介 js是一门,高级,动态,解释型编程语言 每种语言都必须有一个平台或标准库,用于执行包括基本输入和输出在内的基本操作.核心js语言定义了最小限度的API,可以操作数组,文本,数组,集合,映射等,但不包括任何输入输出的功能.输入和输出(以及更加复杂的特性,如联…

基于Servlet实现分页查询

Servlet JSPJSTL MySQLBootstrap 等技术实现分页查询功能。 所用工具:IDEA 2022.3.3 Navicat Tomcat 等。 本文目录 一:运行效果 二:代码详解 (1)index.jsp (2)PageBean &#xff08…

图解操作系统笔记

硬件基础 CPU是如何执行程序的? 程序执行的基本过程 第一步,CPU 读取「程序计数器」的值,这个值是指令的内存地址,然后 CPU 的「控制单元」操作「地址总线」指定需要访问的内存地址,接着通知内存设备准备数据&#…

python:并发编程(十七)

前言 本文将和大家一起探讨python并发编程的实际运用,会以一些我实际使用的案例,或者一些典型案例来分享。本文使用的案例是我实际使用的案例(中篇),是基于之前效率不高的代码改写成并发编程的。让我们来看看改造的过…

excel数据的编排与整理——行列的批量处理

excel数据的编排与整理——行列的批量处理 1 一次性插入多行多列 1.1 插入连续行 1.1.0 题目内容 1.1.1 选中插入的位置➡按住shift键➡往下选中2行 1.1.2 鼠标右击➡点击插入 1.1.3 插入后的效果 1.2 插入不连续行 1.2.0 题目内容 1.2.1 按下ctrl键➡选中插入的位置,需要插…