创建源代码的目录树

生成源代码的目录树

​ 很多时候,由于工程量太大,导致代码量过多,作为一个新入门的小白程序员,实在是记不住,也学不会这么多的代码,这个时候就需要对这些代码进行一些梳理。这里我们要用一个简单的函数来构建源代码的目录树。

调用python库

from pathlib import Path

pathlib.Path库是一个面向对象的文件系统路径,但与纯路径表示不同的是,它提供了对Path对象进行调用的一系列方法。

​ 这里我们主要调用的Path方法包括:

Path.name:获取路径对象的文件名称或文件夹名称;
Path.parent:获取路径对象的逻辑父路径;
pathname.relative_to(pathname.parent):获取文件夹相对于父路径的名称;
Path.is_file():判断路径指向的对象是否为文件;
Path.is_dir():判断路径指向的对象是否为文件夹:
Path.iterdir():路径对象下的路径对象迭代。

分而治之

​ 对于文件夹和文件名,我们需要进行分而治之,文件名只需要按照一定格式添加名称,对于文件夹,则需要添加名称,并对文件夹下面的路径对象进行迭代处理。最终的生成树的代码如下:

##paragrams
##    pathname 面向对象的路径
##	  n:控制路径的空格输出次数
##
def generate_tree(pathname, n=0):
	global tree_str
	if pathname.is_file():
		tree_str += '    |' * n + '-' + pathname.name + '\n'
	if pathname.is_dir():
		tree_str += '    |' * n + '-' + pathname.name + "\\" + '\n'
		for cp in pathname.iterdir():
			generate_tree(cp, n+1)

完整代码如下:

from pathlib import Path

tree_str = ""

##paragrams
##    pathname 面向对象的路径
##	  n:控制路径的空格输出次数
##
def generate_tree(pathname, n=0):
	global tree_str
	if pathname.is_file():
		tree_str += '    |' * n + '-' + pathname.name + '\n'
	if pathname.is_dir():
		tree_str += '    |' * n + '-' + pathname.name + "\\" + '\n'
		for cp in pathname.iterdir():
			generate_tree(cp, n+1)
			
##    创建路径对象,调用函数
##    输出目录树
##
if __name__ == "__main__":
	path = './code'
	generate_tree(Path(path), 0)
	print(tree_str)

输出结果

​ 最近正在学Yolov3-resnet18,所以打印了一下目录树,结果如下:

-YoloV3_modelzoo\
    |-code\
    |    |-args_multi.py
    |    |-args_single.py
    |    |-coco_minival_anns.py
    |    |-coco_trainval_anns.py
    |    |-convert_weight.py
    |    |-data\
    |    |    |-5k.txt
    |    |    |-coco.names
    |    |    |-coco2014_minival.txt
    |    |    |-coco2014_trainval.txt
    |    |    |-darknet_weights\
    |    |    |    |-checkpoint
    |    |    |    |-readme
    |    |    |-demo_data\
    |    |    |    |-dog.jpg
    |    |    |    |-kite.jpg
    |    |    |    |-messi.jpg
    |    |    |    |-results\
    |    |    |    |    |-dog.jpg
    |    |    |    |    |-kite.jpg
    |    |    |    |    |-messi.jpg
    |    |    |-my_data\
    |    |    |    |-readme
    |    |    |-yolo_anchors.txt
    |    |-Dockerfile
    |    |-docker_start.sh
    |    |-docs\
    |    |    |-backbone.png
    |    |    |-yolo_v3_architecture.png
    |    |-eval.py
    |    |-eval.sh
    |    |-eval_coco.py
    |    |-frozen_graph.py
    |    |-get_kmeans.py
    |    |-gitignore
    |    |-hccl_config\
    |    |    |-1p.json
    |    |    |-2p.json
    |    |    |-4p.json
    |    |    |-8p.json
    |    |-infer_from_pb.py
    |    |-LICENSE
    |    |-misc\
    |    |    |-experiments_on_voc\
    |    |    |    |-args_voc.py
    |    |    |    |-eval_voc.py
    |    |    |    |-train.txt
    |    |    |    |-val.txt
    |    |    |    |-voc.names
    |    |    |-parse_voc_xml.py
    |    |    |-remove_optimizers_params_in_ckpt.py
    |    |-model.py
    |    |-modelarts\
    |    |    |-args_modelarts_multi.py
    |    |    |-args_modelarts_single.py
    |    |    |-frozen_graph.py
    |    |    |-__init__.py
    |    |-moxing_tensorflow-1.17.3.7c138bbd-py2.py3-none-any.whl
    |    |-npu_train.sh
    |    |-npu_train_1p_multi.sh
    |    |-npu_train_1p_single.sh
    |    |-npu_train_8p_multi.sh
    |    |-npu_train_8p_single.sh
    |    |-npu_train_wort.sh
    |    |-pip-requirements.txt
    |    |-README.md
    |    |-README_raw.md
    |    |-requirements.txt
    |    |-run_yolov3.sh
    |    |-test_single_image.py
    |    |-train.py
    |    |-utils\
    |    |    |-data_aug.py
    |    |    |-data_utils.py
    |    |    |-eval_utils.py
    |    |    |-layer_utils.py
    |    |    |-misc_utils.py
    |    |    |-nms_utils.py
    |    |    |-plot_utils.py
    |    |    |-__init__.py
    |    |-video_test.py
    |-config.yaml
    |-pretrained_model\
    |    |-checkpoint
    |    |-darknet53.ckpt.data-00000-of-00001
    |    |-darknet53.ckpt.index
    |    |-darknet53.ckpt.meta

​ 然后可以删除掉一些不需要使用文件标注,对剩余文件进行功能标注,标注的结果如所示:

YoloV3_modelzoo/
|- config.yaml     # 创建算法配置
|- code         # 脚本目录
  |- args_multi.py               # 多尺度参数配置文件(裸机和容器中使用)
  |- args_single.py              # 单尺度参数配置文件(裸机和容器中使用)
  |- coco_minival_anns.py        # coco验证集标注生成脚本
  |- coco_trainval_anns.py       # coco训练集标注生成脚本
  |- convert_weight.py           # darknet预训练模型转ckpt脚本
  |- data                         # 包含训练使用的预训练模型、训练集标注、验证集标注、anchor、类 别名称
  |- modelarts                   # modelarts的参数配置文件
  |- docs                         # 说明文档
  |- eval_coco.py                # 计算coco map的脚本
  |- eval.py                     # 测试脚本
  |- eval.sh                     # 测试启动脚本
  |- get_kmeans.py               # 生成anchor的脚本
  |- hccl_config                 # 包含不同p下的hccl配置文件
  |- misc                          # 源代码包含,未使用
  |- model.py                      # 模型构建文件
  |- npu_train_1p_multi.sh         # 单p多尺度训练启动脚本
  |- npu_train_1p_single.sh        # 单p单尺度训练启动脚本
  |- npu_train_8p_multi.sh         # 8p多尺度训练启动脚本
  |- npu_train_8p_single.sh        # 8p单尺度训练启动脚本
  |- npu_train.sh                  # 环境变量设置,执行run_yolov3.sh
  |- npu_train_wort.sh             # 环境变量设置,执行run_yolov3.sh
  |- README.md                     # Readme说明文档
  |- README_raw.md                 # 原始仓Readme说明文档
  |- run_yolov3.sh                 # 启动train.py
  |- test_single_image.py          # 测试一张图片
  |- train.py                      # 构建训练脚本,主入口脚本
  |- utils                         # 工具包,包括数据预处理、nms等脚本
  |- video_test.py                 # 源代码包含,未使用
  |- requirements.ini           # 配置希望从http地址下载的whl包依赖
  |- pip-requirements.txt       # 配置希望从pip源安装的依赖
|- pretrained_model     # 预训练模型,从文件服务器拷贝
  |- darknet53.ckpt.meta
  |- darknet53.ckpt.index
  |- darknet53.ckpt.data-00000-of-00001
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
JavaScript目录代码是一种用于呈现和组织层级结构数据的代码。它可以在网页上创建一个可交互的目录视图,使用户能够展开和折叠层级目录,以便更好地浏览和定位所需的内容。 通常,使用JavaScript目录代码需要以下步骤: 1. 创建HTML结构:首先,在HTML文件中创建一个容器元素,用于显示目录。这可以是一个<div>元素或其他任何具有唯一标识的元素。例如:<div id="tree"></div> 2. 编写JavaScript代码:接下来,在JavaScript文件中编写代码来实现目录功能。首先,创建一个表示目录的数据结构,例如一个包含节点和子节点的对象数组。 3. 递归构建目录:使用递归算法,遍历目录数据结构,将每个节点动态地添加到HTML容器中。对于每个节点,创建一个包含节点内容的元素,并将其附加到其父节点元素上。还可以为父节点和子节点添加相应的样式或事件处理程序。 4. 添加交互功能:为每个目录节点添加交互功能,使用户可以展开或折叠子节点。这可以通过在点击节点时切换其展开/折叠状态来实现。可以使用事件处理程序来监听节点点击事件,并在每次展开/折叠操作后更新节点的样式。 5. 样式和自定义:可以根据需求对目录进行自定义设置,如样式、图标、字体等。可以使用CSS来为目录节点和容器元素添加样式,并使用JavaScript代码来动态添加相应的类或属性。 总而言之,JavaScript目录代码可以帮助我们有效地组织和展示层级结构数据,使用户能够更好地浏览和搜索内容。它是一种常用的界面组件,在许多网站和应用程序中都得到广泛应用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小凡爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值