学习这个的需求来自于,我想把项目架构告诉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) http://www.devze.com 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, indhttp://www.devze.coment=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, www.devze.compath): 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_symbojavascriptls') 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树状打印路径内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论