Python 官网https://www.python.org/




  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


等风来,不如追风去……



“伪”Linux目录树命令tree
——几行代码一个递归,就可以在python代码中tree




目 录


回首页


  寒佬在QQ学习群“Python全栈技术学习交流”发问:
  你能用python代码实现Linux目录文件列印命令tree的功能么?
  真像群友所言“难度蹭蹭蹭一下子就上来了”啊!我只能一脸懵逼的发呆。🥴

  稍瞬,就有人贴出了代码:

import os
import os.path
 
def tree(path, depth=0):
    if depth == 0:
        print(path)
    items = os.listdir(path)
    for item in items:
        # 输出文件夹中的文件和子文件夹名
        print('|    '*depth, end='')
        print('|----', item)
        item = os.path.join(path, item)
        if os.path.isdir(item):
            # 递归遍历子目录
            tree(item, depth+1)
 
tree(r'')

  完了发现是我老师“淡墨-工作号(他虽然还是个小小的学生娃儿,可是懂得不少,我从他那儿学到了些好东西。ZeroTermux这安卓版的虚拟Linux,亦是他带我入门的,不然我可没现在方便run代码。不晓得啥时候起,我就习惯叫他“老师”了。)
寒佬鼓励我们“复刻”tree代码,我也“跃跃欲试”。😜


回首页


  细看代码,比天书好些,能认得26个字母。😀这短短几行代码,真有tree之能?我立即CV→run。居然报错!!


Traceback (most recent call last):
  File "/storage/emulated/0/qpython/tree.py", line 18, in <module>
    tree(r'')
  File "/storage/emulated/0/qpython/tree.py", line 8, in tree
    items = os.listdir(path)
FileNotFoundError: [Errno 2] No such file or directory: ''

报错图
在这里插入图片描述

  原来我照搬了老师的代码,居然不给tree()给参数。🥴🥴修改tree函数调用语句:

tree(r'../001/')

回首页


Run老师代码,看她神奇实现tree命令功用。
在这里插入图片描述

效果立显。👍👍👍💪💪💪
这,还真是“奇妙”🧐🧐。


  仔细“研读”,恶补不会的知识,一天后的现在,能懂得起老师的代码了。想要动手再现。复现tree能力用到了os模块的目录下文件名称字符串列表获取方法listdir(pathname),返回目录下所有文件(或文件夹)名称字符串列表。判断字符串是目录名称还是文件名称,用os模块下子模块path的isdir(pathname)方法,返回True或者False。


回首页


上码


from os.path import isdir # 加载os模块子模块path的isdir()方法。
from os.path import join # 加载os模块子模块path的join()方法。
from os import listdir #listdir # 加载os模块listdir()方法。

path = '../001/re_Chinese_name' # 设置要处理的目录。
print(f"\n“{path}”是目录? → {isdir(path)}") # 判断目录。

for i in listdir(path):
    pathname = join(path, i)
    print(f"“{pathname}”是目录? → {isdir(pathname)}") # 判断目录下文件或者次级目录。

print(isdir'00000)

输出

/sdcard/qpython $ python mytree.py

“../001/re_Chinese_name”是目录? → True../001/re_Chinese_name/data”是目录? → True../001/re_Chinese_name/re_Chinese_name.py”是目录 ? → False

截屏图片
在这里插入图片描述

  os.path.isdir()方法的坑:随便给个字符串,都不会报错,只是返回False。我开头没有拼接完成路径用isdir()方法,得到了“错误”判定,一直懵逼调试中。累得“半死”才出坑。😭😭


os.path.isdir('00000') # 随便给个字符串,都不会报错,只是返回False。

os.path.join()方法同字符串的.join()方法,语法略有不同。(此例是伪代码)

a, b = 上级目录名,次级目录名或文件名
os.path.join(a, b)
'/'.join((a, b)) # 或者'/'.join([a,b]) ,这个方法接一个参数,用元组或列表都可以。

回首页


完成代码封装后,就可以简洁地tree了。🤗🤗


if __name__ == '__main__':
    path = 'projects3/power_mom/' # 设置要处理的目录。
    mytree = MyTree() # 实例类。
    mytree.tree(path) # 伪tree方法调用。
    print('-'*50) # 打印目录列完分割线。

代码运行效果
在这里插入图片描述


回首页


复现老师代码的完整源码


#!/sur/bin/nve python
# coding: utf-8

'''

filename = 'mytree.py'

author = '梦幻精灵_cq'

time = '2022-07-01'

'''


class MyTree:
    ''' python 实现Linux目录树命令tree之能 '''


    def tree(self, folder, depth=0):
        ''' 复刻Linux命令tree '''
        from os import listdir # 加载os模块获取路径下所有文件列表方法。
        from os.path import isdir # 加载os模块子模块path的判定目录方法。
        from os.path import join # 加载os模块子模块path的目录拼接方法。
        from os.path import abspath # 加载os模块获取给定路径绝对路径方法。


        if depth == 0: # 第一层目录,蓝色打印绝对路径。
            print(f"\n{self.f_color(abspath(folder), 4)}\n{'-'*50}")

        for name in listdir(folder): # 遍历目录文件列表打印。
            if isdir(name2 := join(folder, name)): # 蓝色打印目录。
                print(f"{'|    '*depth}|{'-'*4}{self.f_color(name, 3)}")
                self.tree(name2, depth+1) # 递归遍历次级目录。
            else: # 黄色打印文件。
                print(f"{'|    '*depth}|{'-'*4}{self.f_color(name, 4)}")


    def f_color(self, string, num):
        ''' 字符串设置打印前景色 '''
        return f"\033[3{num}m{string}\033[0m"


if __name__ == '__main__':
    path = 'projects3/power_mom/' # 设置要处理的目录。
    mytree = MyTree() # 实例类。
    mytree.tree(path) # 伪tree方法调用。
    print('-'*50) # 打印目录列完分割线。

在这里插入图片描述


回首页

__上一篇:__ 中文姓名提取(玩具代码——准头太小,权当玩闹)

__下一篇:__ 练习:试炼自然常数e

我的HOT博:
推荐条件 点阅破千

回目录


老齐漫画头像

精品文章:

来源:老齐教室


回目录

Python 入门指南【Python 3.6.3】

好文力荐:

CSDN实用技巧博文:


Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐