摘要:在项目开发过程中,一个良好的项目结构对于团队的协作和代码的可维护性起着重要作用。通过使用自动生成项目结构文字样式的工具。不仅节省了手动编写项目结构的麻烦,还确保了结构的一致性和准确性。

本文分享自华为云社区《【Python】自动化构建项目结构样式》,作者: frica01。

引言

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

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

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

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

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

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

展示

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

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

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

看以下动图展示:

再来看下面的截图

知识点

安装依赖

  • 免安装,Python 内置

导入模块

import os

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

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

  • os.path.join 用于安全地连接路径
  • os.path.isdir 用于检查路径是否为目录
  • os.path.basename 用于提取路径的最后一部分
  • 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,我们可以轻松地生成项目结构的可视化表示,并将其整理为一个文本文件。这个工具不仅节省了手动编写项目结构的麻烦,还确保了结构的一致性和准确性。

号外

7 月 7 日,华为开发者大会 2023 (Cloud) 将拉开帷幕,并将在国内 30 多个城市、海外 10 多个国家开设分会场,诚邀您参加这场不容错过的年度开发者盛会,让我们一起开启探索之旅!

我们将携手开发者、客户、合作伙伴,为您呈现华为云系列产品服务与丰富的创新实践,并与您探讨 AI、大数据、数据库、PaaS、aPaaS、媒体服务、云原生、安全、物联网、区块链、开源等技术话题,展开全面深入的交流。

大会将汇聚全球科学家、行业领袖、技术专家、社区大咖,开设 200 多场开发者专题活动,为全球开发者提供面对面交流与合作的机会,共同探讨技术创新和业务发展。

大会官网:https://developer.huaweicloud.com/HDC.Cloud2023.html

参会购票:https://www.vmall.com/product/10086352254099.html?cid= 211761

点击参与开发者社区活动,观赏技术大咖秀、玩转技术梦工厂,有机会赢取4000元开发者礼包!

欢迎关注 “华为云开发者联盟” 公众号,获取大会议程、精彩活动和前沿干货。

点击关注,第一时间了解华为云新鲜技术~

Python开发中自动化构建项目结构样式的更多相关文章

  1. 基于vue模块化开发后台系统——构建项目

    文章目录如下:项目效果预览地址项目开源代码基于vue模块化开发后台系统--准备工作基于vue模块化开发后台系统--构建项目基于vue模块化开发后台系统--权限控制 前言 在熟悉上一篇说到准备工具之后, ...

  2. Jenkins自动化构建系列:01敏捷开发、自动化构建与持续集成

    <SVN与TortoiseSVN实战系列>已写完,今天新开一个<Jenkins自动化构建系列>,上周听了Bob Jiang老师的Agile1001公开课,一直想写个总结,这篇关 ...

  3. 使用.NET 6开发TodoList应用(2)——项目结构搭建

    为了不影响阅读的体验,我把系列导航放到文章最后了,有需要的小伙伴可以直接通过导航跳转到对应的文章 : P TodoList需求简介 首先明确一下我们即将开发的这个TodoList应用都需要完成什么功能 ...

  4. 在iOS开发中,给项目添加新的.framework

    首先需要了解一下iOS中静态库和动态库.framework的概念 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我 ...

  5. vue.js2.0实战(1):搭建开发环境及构建项目

    Vue.js学习系列: vue.js2.0实战(1):搭建开发环境及构建项目 https://my.oschina.net/brillantzhao/blog/1541638 vue.js2.0实战( ...

  6. django开发个人简易Blog——构建项目结构

    开发之前第一步,就是构造整个的项目结构.这就好比作一幅画,第一步就是描绘轮廓,有了轮廓,剩下的就是慢慢的填充细节.项目结构规划如下图: 项目结构描述: 本项目以fengzhengBlog为根目录. a ...

  7. .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI

    作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...

  8. vue.js2.0:如何搭建开发环境及构建项目

    1,安装node.js Node.js官网:https://nodejs.org/en/ 进入Node.js官网,选择下载并安装Node.js.安装过程只需要点击“下一步”即可, 如下图,非常简单. ...

  9. vue学习记录①(vue-cli脚手架构建项目结构)

    我们直接从vue的工程化开始入手. 在这里用git命令行搭建项目环境.(当然直接cmd命令行下也是一样的) git下载安装地址:https://www.git-scm.com/download/win ...

  10. android studio 开发中启动android项目报错sdk版本不一致解决方案

    安卓项目开发中新建项目后再run'的时候发现报错com.android.support:appcompat-v7依赖报错 查看下build.gredle所配置的参数: 打开项目的build.gradl ...

随机推荐

  1. xcodebuild命令行工具使用详解

    xcodebuild命令行工具使用 如何通过命令行编译ios项目? xcodebuild是一个命令行工具,允许你从命令行对Xcode项目和工作区执行编译.查询.分析.测试和归档操作.它对项目中包含的一 ...

  2. Solon2 的通讯服务线程配置

    Solon 框架,关于通讯服务的所有配置 #服务端口(默认为8080) server.port: 8080 #服务主机(ip) server.host: "0.0.0.0" #服务 ...

  3. 详解C++中的extern与static关键字

    本章通过问答方式明晰两个关键字及其作用. Q1:对于int x:,不加extern关键字他就是个未赋初值的定义,但是如果加了static或者extern都可以表示这仅是一个声明吗? A:不是的,具体情 ...

  4. 理解Linux系统: 进程

    Linux内核版本: 2.6.11.12 编写代码: 创建进程 创建进程使用fork系统调用,官方文档对于fork的描述: fork() creates a new process by duplic ...

  5. 第4章. 安装reco主题

    大家可以按照我的教程来安装,也可以访问 reco_luan 大佬的 官方教程 根据自己的电脑类型和开发环境配置,来选择合适的安装方式. 一.快速开始 npx # 初始化,并选择 2.x npx @vu ...

  6. chatgpt接口开发笔记1:completions接口

    chatgpt接口开发笔记1:completions接口 个人博客地址: https://note.raokun.top 拥抱ChatGPT,国内访问网站:https://www.playchat.t ...

  7. C# 获取所有桌面窗口信息

    窗口标题.窗口类名.是否可见.是否最小化.窗口位置和大小.窗口所在进程信息 1 private static WindowInfo GetWindowDetail(IntPtr hWnd) 2 { 3 ...

  8. Python-pytest-repeat的简单使用

    前言: 一.简介 pytest-repeat是pytest的插件,重复执行单个用例,或多个测试用例,并指定重复次数. 二.安装 1.执行如下命令 pip3 install pytest-repeat ...

  9. Hugging News #0428: HuggingChat 来啦

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  10. 2022-04-08:在一张 无向 图上,节点编号0~N-1。老鼠开始在1节点,猫在2节点,0号节点是洞,老鼠想进洞, 老鼠第先出发,猫后出发,轮流行动。 在每个玩家的行动中,他们 必须 沿着图中与所

    2022-04-08:在一张 无向 图上,节点编号0~N-1.老鼠开始在1节点,猫在2节点,0号节点是洞,老鼠想进洞, 老鼠第先出发,猫后出发,轮流行动. 在每个玩家的行动中,他们 必须 沿着图中与所 ...