首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python生成目录树

在写一些文章时,尤其是一些技术文章或者教程,有时需要将目录结构附在文中,最简单粗暴的方法是自己手动写,但是效率太低,今天就来介绍一下高效率、美观的方法。

1、CMD生成目录树

在 windows 系统中,有一个 CMD 指令可以生成目录树,该条指令是 "tree" 。

1.1 查看帮助

使用 “Win+R" 快捷键调出运行对话框,然后输入 ”CMD“ 回车打开命令行窗口。可以在窗口中输入 ”tree /?" 查看:

1.2 作用

从上述帮助文档中可以看出 tree 命令的作用是“以图形显示驱动器或路径的文件夹结构”。

1.3 命令格式

如果我们只想在命令行窗口查看文件夹目录结构,可以使用如下格式:

输出内容如下:

01_tree只打印文件夹结构

注意:如果路径中含有空格,则路径需要用双引号包起来,例如 。

上面的指令只能生成文件夹的目录结构,并没有显示文件,我们可以增加 参数来显示文件夹和文件的目录结构:

这样就ok了:

02_tree显示文件夹和文件结构

上述命令只是在控制台打印出来了,有时候会有保存到文件的需求,只需对上述命令稍作修改:

命令执行之后,在命令行所在目录下会生成一个名为 “dirtree.txt” 的文件,目录结构已在其中。

2、Python生成目录树

上述CMD方式虽然可以生成目录树,但是并不美观,让我们用 Python 实现。

2.1 标准库pathlib介绍

Python有一个标准文件路径处理库os.path,从Python3.4开始,Python 又加入了一个标准库pathlib,该库是跨平台的、面向对象的路径操作库。

本例使用了 pathlib 中的Path类。本文用到的一些基本操作如下:

Path 类的引入:

创建 Path 对象:

获取 p 的路径名称:

获取 p 目录下的所有文件:

判断 p 是不是文件:

判断 p 是不是目录:

2.2 代码实现

思路:给出一个路径,判断是否为文件,如果是,则字符串拼接;否则,字符串拼接并且递归查询该目录下的文件。字符串拼接的时候以缩进来显示层次结构。

输出结果:

2.3 改进,显示指定目录

上述程序有一个缺点,就是执行时只能显示程序文件所在目录的目录树结构,想要生成其目录的目录树结构就需要将其拷贝到那个目录执行。这样很不方便,我们可以利用命令参数将目标路径传递给程序,然后进行显示。上述generate_tree() 不需要修改。执行部分改一下:

修改以后,可以在命令行中添加目录参数了:

执行结果如图所示:

03_命令行带路径

2.4 改进,保存文本文件

以上实现了在控制台打印的功能,但是缺少保存文件的功能,没关系,下面就来实现。

定义保存文件函数:

修改命令行参数解析部分:

修改完毕之后,可以使用下面命令测试:

执行完之后就会在该目录下生成 dirtree.txt 文件。

2.5 改进,封装

上述功能已经实现,但是用到了全局变量,既然是一个完整的功能不如封装成一个类。

同样可以使用以下三条命令进行测试:

:打印当前目录的目录树;

:打印指定目录的目录树;

:打印指定目录的目录树并保存成文件。

3、其他想法

本来在改进部分还想要生成图片,但是经过一番测试遇到以下问题:

使用PIL库把目录树转换为图片:该库在生成图片的时候要指定图片的大小,我们知道目录树结构根据文件夹内容不定长度和高度,所以需要动态计算长度和高度。

使用Pygame库把目录树转换为图片:该库可以自适应宽度,但是不能识别换行符,所以最后生成的图片只有一行。

思路:

可以把目录树的每一行都生成一个图片,最后进行拼接,理论上可行,没有进行测试,有兴趣的可以尝试。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180504G0VYZ000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券