python树状打印项目路径的实现

 更新时间:2023年10月16日 08:33:50   作者:临风而眠  
在Python中,要打印当前路径,可以使用os模块中的getcwd()函数,本文主要介绍了python树状打印项目路径,具有一定的参考价值,感兴趣的可以了解一下

学习这个的需求来自于,我想把项目架构告诉gpt问问它,然后不太会打印项目架构?? 联想到Linux的tree指令

import os


class DirectoryTree:
    def __init__(self, path):
        self.path = path

    def print_tree(self, method='default'):
        if method == 'default':
            self._print_dir_tree(self.path)
        elif method == 'with_count':
            self._print_dir_tree_with_count(self.path)
        elif method == 'files_only':
            self._print_files_only(self.path)
        elif method == 'with_symbols':
            self._print_dir_tree_with_symbols(self.path)
        else:
            print("Invalid method!")

    def _print_dir_tree(self, path, indent=0):
        print(' ' * indent + '|---' + os.path.basename(path))
        for item in os.listdir(path):
            itempath = os.path.join(path, item)
            if os.path.isdir(itempath):
                self._print_dir_tree(itempath, indent + 2)
            else:
                print(' ' * (indent + 2) + '|---' + item)

    def _print_dir_tree_with_count(self, path, indent=0):
        print(' ' * indent + '|---' + os.path.basename(path), end=' ')
        items = os.listdir(path)
        dirs = sum(1 for item in items if os.path.isdir(
            os.path.join(path, item)))
        files = len(items) - dirs
        print(f"(dirs: {dirs}, files: {files})")
        for item in items:
            itempath = os.path.join(path, item)
            if os.path.isdir(itempath):
                self._print_dir_tree_with_count(itempath, indent + 2)
            else:
                print(' ' * (indent + 2) + '|---' + item)

    def _print_files_only(self, path, indent=0):
        for item in os.listdir(path):
            itempath = os.path.join(path, item)
            if os.path.isdir(itempath):
                self._print_files_only(itempath, indent)
            else:
                print(' ' * indent + '|---' + item)

    def _print_dir_tree_with_symbols(self, path, indent=0):
        print(' ' * indent + '?? ' + os.path.basename(path))
        for item in os.listdir(path):
            itempath = os.path.join(path, item)
            if os.path.isdir(itempath):
                self._print_dir_tree_with_symbols(itempath, indent + 2)
            else:
                print(' ' * indent + '?? ' + item)




class EnhancedDirectoryTree:
    def __init__(self, path):
        self.path = path
        self.show_hidden = False
        self.depth_limit = None
        self.show_files = True
        self.show_dirs = True

    def display_settings(self, show_hidden=False, depth_limit=None, 
                         show_files=True, show_dirs=True):
        self.show_hidden = show_hidden
        self.depth_limit = depth_limit
        self.show_files = show_files
        self.show_dirs = show_dirs

    def print_tree(self):
        self._print_dir(self.path)

    def _print_dir(self, path, indent=0, depth=0):
        if self.depth_limit is not None and depth > self.depth_limit:
            return

        if self.show_dirs:
            print(' ' * indent + '?? ' + os.path.basename(path))

        for item in sorted(os.listdir(path)):
            # Check for hidden files/folders
            if not self.show_hidden and item.startswith('.'):
                continue

            itempath = os.path.join(path, item)

            if os.path.isdir(itempath):
                self._print_dir(itempath, indent + 2, depth + 1)
            else:
                if self.show_files:
                    print(' ' * indent + '?? ' + item)





# 创建类的实例
tree = DirectoryTree(os.getcwd())

# 使用默认方法打印
print("Default:")
tree.print_tree()

# 使用带计数的方法打印
print("\nWith Count:")
tree.print_tree(method='with_count')

# 使用只打印文件的方法
print("\nFiles Only:")
tree.print_tree(method='files_only')

# 使用emoji
print("\nWith Symbols:")
tree.print_tree(method='with_symbols')

print('================================================================')

enhancedtree = EnhancedDirectoryTree(os.getcwd())

# Default print
enhancedtree.print_tree()

print("\n---\n")

# Configure settings to show hidden files, but only up to depth 2 and only directories
enhancedtree.display_settings(show_hidden=True, depth_limit=2, show_files=False)
enhancedtree.print_tree()

print("\n---\n")

# Configure settings to show only files up to depth 1
enhancedtree.display_settings(show_files=True, show_dirs=False, depth_limit=1)
enhancedtree.print_tree()

  • os.getcwd(): 返回当前工作目录的路径名。

  • os.path.basename(path): 返回路径名 path 的基本名称,即去掉路径中的目录部分,只保留文件或目录的名称部分。

  • os.listdir(path): 返回指定路径 path 下的所有文件和目录的名称列表。

  • os.path.isdir(path): 判断路径 path 是否为一个目录,如果是则返回 True,否则返回 False

  • os.path.join(path, *paths): 将多个路径组合成一个完整的路径名。这个函数会自动根据操作系统的不同使用不同的路径分隔符。

  • 上面两个类里面的函数其实就是用到递归,第二个类的那个函数可以设置递归深度

到此这篇关于python树状打印项目路径的实现的文章就介绍到这了,更多相关python树状打印路径内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 简单几步教你学会Python接口自动化测试

    简单几步教你学会Python接口自动化测试

    这篇文章主要介绍了简单几步教你学会Python接口自动化测试,本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势,期望读者可以通过本文对接口自动化测试有一个大致的了解,需要的朋友可以参考下
    2023-08-08
  • 一个基于flask的web应用诞生 使用模板引擎和表单插件(2)

    一个基于flask的web应用诞生 使用模板引擎和表单插件(2)

    一个基于flask的web应用诞生第二篇,这篇文章主要介绍了如何使用jinja2模板引擎和wtf表单插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Django如何利用uwsgi和nginx修改代码自动重启

    Django如何利用uwsgi和nginx修改代码自动重启

    这篇文章主要介绍了Django如何利用uwsgi和nginx修改代码自动重启问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 详解Python读取yaml文件多层菜单

    详解Python读取yaml文件多层菜单

    这篇文章主要介绍了Python读取yaml文件多层菜单,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • python-字典dict和集合set

    python-字典dict和集合set

    这篇文章主要介绍了python-字典dict和集合set,字典是python中的一种数据结构。集合(set)与字典相同均存储key,但只存储key,key不可重复,所以set中的值不可重复,而且是无序,下面来看看更多相关内容吧
    2021-12-12
  • Pygame Rect区域位置的使用(图文)

    Pygame Rect区域位置的使用(图文)

    在 Pygame 中我们使用 Rect() 方法来创建一个指定位置,大小的矩形区域。本文主要就来介绍一下如何使用,具有一定的参考价值,感兴趣的可以了解一下
    2021-11-11
  • python Pangu自动美化中文排版工具使用探索

    python Pangu自动美化中文排版工具使用探索

    这篇文章主要为大家介绍了python Pangu自动美化中文排版工具使用探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 如何在Python 中使用 join() 函数把列表拼接成一个字符串

    如何在Python 中使用 join() 函数把列表拼接成一个字符串

    这篇文章主要介绍了如何在Python 中使用 join() 函数把列表拼接成一个字符串,文章围绕 join() 函数的相关资料展开详细内容,需要的小伙伴可以参考一下,希望对你有帮助
    2022-03-03
  • Keras模型转成tensorflow的.pb操作

    Keras模型转成tensorflow的.pb操作

    这篇文章主要介绍了Keras模型转成tensorflow的.pb操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 解决Pandas生成Excel时的sheet问题的方法总结

    解决Pandas生成Excel时的sheet问题的方法总结

    估计有不少小伙伴在将 DataFrame导入到Excel的时候,遇到过下面这种尴尬的情况:想给一个现有的Excel文件追加一个sheet,结果发现其它的sheet都没了等,本文就来告诉你如何解决这些问题
    2022-08-08

最新评论