加入收藏

天天观察:Python开发中自动化构建项目结构样式

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

本文分享自华为云社区《【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 文件中。好处如下:

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

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

作用

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

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

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

代码

递归地遍历指定目录下的文件和文件夹,并按照特定的格式输出它们的结构。

# -*- coding: utf-8 -*-# @Author : Frica01# @Time   : 2023-06-22 0:00# @Name   : project_structure_generator.pyimport 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元开发者礼包!

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

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

关键词:

相关新闻

资讯

世界报道:立即重启系统什么意思
世界报道:立即重启系统什么意思

1、rebootsystemnow_百度翻译rebootsystemnow英[ri:ˈ......更多>

基督教起源时期 基督教的起源时间
基督教起源时期 基督教的起源时间

1、公元1世纪,基督教起源于巴勒斯坦,相传为犹太的拿撒......更多>

天天热议:毕福剑罕现身_毕福剑昔日全家福曝光
天天热议:毕福剑罕现身_毕福剑昔日全家福曝光

1、2015央视春晚主持人名单:朱军、董卿、康辉、撒贝......更多>

snkrs切换不回中国了怎么办snkrs切换不回中国解决办法
snkrs切换不回中国了怎么办snkrs切换不回中国解决办法

我们在使用snkrs软件时候,有点玩家们可能就会遇到在......更多>

财产安全防范知识_安全防范知识 速看料
财产安全防范知识_安全防范知识 速看料

1、一、飞车抢夺防范方法:是在公共场合不要 "露财 "......更多>

山东慈善奖!临沂市公示28名拟推荐对象 世界百事通
山东慈善奖!临沂市公示28名拟推荐对象 世界百事通

近日,临沂市民政局发布关于第八届“山东慈善奖”临沂......更多>

今年全国快递业务量已达600亿件 微头条
今年全国快递业务量已达600亿件 微头条

原标题:今年全国快递业务量已达600亿件中工网北京6月......更多>

焦点关注:农发行常州市分行“量、质、效”并举 全力支持乡村振兴
焦点关注:农发行常州市分行“量、质、效”并举 全力支持乡村振兴

今年以来,农发行江苏省常州市分行坚守职能定位,创优......更多>

环球速递!美元VC喊话高考生:“家里没钱别学金融,别做投资”
环球速递!美元VC喊话高考生:“家里没钱别学金融,别做投资”

现在,吃饭费用今年一季度末的时候取消了,打车也只......更多>

2023好网民·在山东|张立敏:讲好医患暖心故事 全球热资讯
2023好网民·在山东|张立敏:讲好医患暖心故事 全球热资讯

“我们干宣传工作就是要用自身的责任和情怀,将正能量......更多>

关注

【全球聚看点】世界互联网大会数字文明尼山对话在山东举行
【全球聚看点】世界互联网大会数字文明尼山对话在山东举行
消息(新闻联播):今天(6月26日),世界互联网大会... 更多>
【全球聚看点】世界互联网大会数字文明尼山对话在山东举行
消息(新闻联播):今天(6月26日),世界互联网大会... 更多>
瞄准前沿技术 促进降本增效(经济聚焦)_天天即时
核心阅读从上游硅料技术研发、中游组件生产制造,到下... 更多>
朱啸虎、傅盛激辨GPT背后,AI 大模型“泡沫”要破了?
ChatGPT热潮下,基于大模型的创业是否有价值,猎豹移... 更多>
英国连锁超市Sainsbury进一步降价 表明通胀有所缓解
【英国连锁超市Sainsbury进一步降价表明通胀有所缓解... 更多>
焦点日报:《合金装备4》曾计划登陆Xbox 360 主机遭取消
《合金装备4》曾考虑登录Xbox360主机,但由于需要多张... 更多>
端午节假期国内出游人次破亿
端午节假期,旅游市场表现亮眼。文旅部6月24日晚披露... 更多>
全球头条:南华西社区红歌会奏响,居民欢聚享音乐盛宴
为传承红色基因,厚植爱国主义情怀,赓续红色血脉,6... 更多>
当前消息!@找工作的你 快看!华南理工大学附属实验学校招聘教师4名
五山君了解到,因教学工作需要华南理工大学附属实验学... 更多>
2023上半年中国房地产总结与展望(产品篇)-当前关注
2023上半年中国房地产总结与展望(产品篇),四房,小户... 更多>
“彩云之约”海外台胞云南行正式启动|当前焦点
6月27日,以“同心圆梦融合发展”为主题的“彩云之约... 更多>
让群众成为竞演的主角 让竞演成为群众的节日丨聚焦“乡当潮”竞演大赛 资讯推荐
6月以来,四川省第三届乡村文化振兴魅力竞演大赛在我... 更多>
2023江苏航空职业技术学院招生计划-各专业招生人数是多少
高考填报志愿时,江苏航空职业技术学院招生计划是广大... 更多>