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