|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
CMD中没有tree这个命令,所以自己使用Python编写了一个可以遍历目录而且还是以树形图表的形式显示目录结构的脚本,
代码如下:- '''If a directory is like this:
- root/
- |-- dir1/
- | |-- file1.txt
- | |-- file2.txt
- | |-- sub1/
- | | |-- video1.mp4
- | | |-- video2.mp4
- | | |-- video3.mp4
- | | `-- sub_n/
- | | |-- f1.png
- | | `-- f2.png
- | `-- sub2/
- | |-- pic1.jpg
- | |-- pic2.jpg
- | `-- pic3.jpg
- |-- dir2/
- | |-- text1.md
- | |-- text2.md
- | `-- text3.md
- |-- main.py
- |-- spam.py
- |-- eggs.py
- `-- hams.py
- Each row has three components: prefix, item and suffix.
- Definitions are as follow:
- prefix:
- A prefix is everything before a file or a directory and it
- also has three parts: upper prefix, indent and item mark.
- * A upper prefix is a prefix before a directory, which will be
- used to create new prefix for items within a directory.
- Root directory's prefix is an empty string.
- * Indent is either '| ' or ' '.
- * Item mark is adjacent to a file or a directory,
- which is '`-- ' for last item or '|-- ' for everything except
- the last one in a direcotry.
- item:
- An item is either a directory or a file.
- suffix:
- Only a directory has a suffix '/'.
- '''
- from os import listdir
- from os.path import abspath, basename, isdir, join
- MARK_1 = ' ' # indentation
- MARK_2 = '| ' # indentation
- MARK_3 = '|-- ' # mark adjacent to a file or a directory
- MARK_4 = '`-- ' # mark for the last item of a directory
- def tree(dir_: str, prefix: str = '', indent: str = '') -> None:
- '''Iter recursively a directory to print everything within it in
- an ascii tree graph.
- :param dir_: str, a root directory.
- :param prefix: str, everything before a file or a directory.
- :param indent: str, indent mark for building new prefix.
- '''
- # print directory
- print(f'{prefix}{basename(abspath(dir_))}/')
- # [upper prefix] [indent] |--
- prefix = prefix[:-len(MARK_3)] + indent + MARK_3
- contents = listdir(dir_)
- max_indx = len(contents) - 1
- for idx, item in enumerate(contents):
- path = join(dir_, item)
- if isdir(path):
- if idx < max_indx:
- tree(path, prefix, MARK_2)
- else:
- tree(path, prefix.replace(MARK_3, MARK_4), MARK_1)
- else:
- if idx == max_indx:
- prefix = prefix.replace(MARK_3, MARK_4)
- # print file
- print(f'{prefix}{item}')
- if __name__ == '__main__':
- tree('.')
复制代码
使用的是递归,话说递归确实有点难啊
其他同学也可以试试用argparse这个标准库把代码改装成一个命令行工具 |
|