最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python實(shí)現(xiàn)優(yōu)雅的目錄結(jié)構(gòu)打印工具

 更新時(shí)間:2025年07月07日 08:33:37   作者:嘆一曲當(dāng)時(shí)只道是尋常  
在軟件開發(fā),系統(tǒng)管理和日常工作中,我們經(jīng)常需要查看和分析目錄結(jié)構(gòu),本文我們將使用Python語言打造一個(gè)目錄結(jié)構(gòu)打印工具,有需要的小伙伴可以了解下

在軟件開發(fā)、系統(tǒng)管理和日常工作中,我們經(jīng)常需要查看和分析目錄結(jié)構(gòu)。

工具功能概述

這個(gè)DirectoryPrinter類提供了以下功能:

  • 遞歸打印目錄結(jié)構(gòu)
  • 可配置是否顯示隱藏文件
  • 可設(shè)置最大遞歸深度
  • 自定義縮進(jìn)和文件/文件夾符號(hào)
  • 友好的交互式配置界面

核心代碼解析

初始化配置

def __init__(self, root_dir, show_hidden=False, depth=0, max_depth=None, 
             indent_symbol='│   ', folder_symbol='/ ', file_symbol='- '):
    self.root_dir = root_dir
    self.show_hidden = show_hidden
    self.max_depth = max_depth
    self.indent_symbol = indent_symbol
    self.folder_symbol = folder_symbol
    self.file_symbol = file_symbol
    self.depth = depth

構(gòu)造函數(shù)接收多個(gè)參數(shù),允許用戶自定義打印行為。特別是indent_symbol、folder_symbolfile_symbol參數(shù),可以完全改變輸出樣式。

目錄打印邏輯

def print_directory(self):
    try:
        items = os.listdir(self.root_dir)
    except FileNotFoundError:
        print(f"指定的目錄 {self.root_dir} 不存在")
        return
    except PermissionError:
        print(f"無法訪問目錄 {self.root_dir}")
        return
    
    # 過濾隱藏文件
    if not self.show_hidden:
        items = [item for item in items if not (item.startswith('.') and os.path.isfile(os.path.join(self.root_dir, item)))]

方法首先嘗試列出目錄內(nèi)容,并處理可能出現(xiàn)的異常。然后根據(jù)配置過濾隱藏文件。

遞歸打印

for index, item in enumerate(sorted(items), start=1):
    path = os.path.join(self.root_dir, item)
    is_dir = os.path.isdir(path)
    
    # 構(gòu)建前綴
    prefix = self.indent_symbol * self.depth
    if index == len(items):
        if is_dir:
            print(f"{prefix}└── {self.folder_symbol}{item}")
        else:
            print(f"{prefix}└── {self.file_symbol}{item}")
    else:
        if is_dir:
            print(f"{prefix}├── {self.folder_symbol}{item}")
        else:
            print(f"{prefix}├── {self.file_symbol}{item}")
    
    # 遞歸處理子目錄
    if is_dir:
        child_printer = DirectoryPrinter(
            root_dir=path,
            show_hidden=self.show_hidden,
            depth=self.depth + 1,
            max_depth=self.max_depth,
            indent_symbol=self.indent_symbol,
            folder_symbol=self.folder_symbol,
            file_symbol=self.file_symbol
        )
        child_printer.print_directory()

這部分代碼實(shí)現(xiàn)了遞歸打印的核心邏輯,使用不同的符號(hào)區(qū)分文件和文件夾,以及區(qū)分是否是最后一項(xiàng)。

使用示例

通過交互式界面配置打印參數(shù):

def main():
    root_directory = input("請(qǐng)輸入要打印的目錄路徑: ") or os.getcwd()
    hide_hidden_files = input("是否隱藏隱藏文件? (y/n): ").lower() != 'y'
    max_depth = input("請(qǐng)輸入最大遞歸深度 (留空表示無限制): ").strip() or None
    auto_print = input("是否自動(dòng)打印目錄結(jié)構(gòu)? (y/n): ").lower() == 'y'
    
    printer = DirectoryPrinter(
        root_dir=root_directory,
        show_hidden=hide_hidden_files,
        max_depth=max_depth
    )
    
    printer.print_directory()

輸出效果

示例輸出可能如下:

├── / dir1
│   ├── - file1.txt
│   └── / subdir
│       └── - file2.txt
└── / dir2
    ├── - file3.txt
    └── - file4.txt

完整代碼

import os

class DirectoryPrinter:
    def __init__(self, root_dir, show_hidden=False, depth=0, max_depth=None, indent_symbol='│   ', folder_symbol='/ ', file_symbol='- '):
        """
        初始化目錄打印器

        :param root_dir: 指定要打印的目錄路徑
        :param show_hidden: 是否打印隱藏文件和文件夾(默認(rèn)為 False)
        :param depth: 當(dāng)前遞歸深度(內(nèi)部使用,用戶無需設(shè)置)
        :param max_depth: 最大遞歸深度,None 表示無限制
        :param indent_symbol: 縮進(jìn)符號(hào)
        :param folder_symbol: 文件夾前綴符號(hào)
        :param file_symbol: 文件前綴符號(hào)
        """
        self.root_dir = root_dir
        self.show_hidden = show_hidden
        self.max_depth = max_depth
        self.indent_symbol = indent_symbol
        self.folder_symbol = folder_symbol
        self.file_symbol = file_symbol
        self.depth = depth

    def print_directory(self):
        """
        打印目錄結(jié)構(gòu)
        """
        try:
            items = os.listdir(self.root_dir)
        except FileNotFoundError:
            print(f"指定的目錄 {self.root_dir} 不存在")
            return
        except PermissionError:
            print(f"無法訪問目錄 {self.root_dir}")
            return

        # 過濾隱藏文件
        if not self.show_hidden:
            items = [item for item in items if not (item.startswith('.') and os.path.isfile(os.path.join(self.root_dir, item)))]

        # 遞歸打印目錄和文件
        for index, item in enumerate(sorted(items), start=1):
            path = os.path.join(self.root_dir, item)
            is_dir = os.path.isdir(path)

            # 根據(jù)當(dāng)前深度和最大深度決定是否繼續(xù)遞歸
            if self.max_depth is not None and self.depth > self.max_depth:
                continue

            # 構(gòu)建前綴
            prefix = self.indent_symbol * self.depth
            if index == len(items):
                if is_dir:
                    print(f"{prefix}└── {self.folder_symbol}{item}")
                else:
                    print(f"{prefix}└── {self.file_symbol}{item}")
            else:
                if is_dir:
                    print(f"{prefix}├── {self.folder_symbol}{item}")
                else:
                    print(f"{prefix}├── {self.file_symbol}{item}")

            # 遞歸處理子目錄
            if is_dir:
                child_printer = DirectoryPrinter(
                    root_dir=path,
                    show_hidden=self.show_hidden,
                    depth=self.depth + 1,
                    max_depth=self.max_depth,
                    indent_symbol=self.indent_symbol,
                    folder_symbol=self.folder_symbol,
                    file_symbol=self.file_symbol
                )
                child_printer.print_directory()

def main():
    """
    主函數(shù),用戶配置入口
    """
    # 配置參數(shù)
    root_directory = input("請(qǐng)輸入要打印的目錄路徑: ") or os.getcwd()  # 默認(rèn)為當(dāng)前目錄
    hide_hidden_files = input("是否隱藏隱藏文件? (y/n): ").lower() != 'y'
    max_depth = input("請(qǐng)輸入最大遞歸深度 (留空表示無限制): ").strip() or None  # 無限制
    auto_print = input("是否自動(dòng)打印目錄結(jié)構(gòu)? (y/n): ").lower() == 'y'

    # 轉(zhuǎn)換為整數(shù)
    try:
        max_depth = int(max_depth) if max_depth else None
    except ValueError:
        print("最大遞歸深度必須為整數(shù)")
        return

    # 打印配置
    print("\n=== 配置 ===")
    print(f"根目錄: {root_directory}")
    print(f"隱藏文件和文件夾: {'是' if hide_hidden_files else '否'}")
    print(f"最大遞歸深度: {'無限制' if max_depth is None else max_depth}")

    # 初始化打印器
    printer = DirectoryPrinter(
        root_dir=root_directory,
        show_hidden=hide_hidden_files,
        max_depth=max_depth
    )

    # 開始打印
    if auto_print:
        print("\n=== 目錄結(jié)構(gòu) ===")
        printer.print_directory()
    else:
        input("\n按下回車鍵開始打印目錄結(jié)構(gòu)...")
        print("\n=== 目錄結(jié)構(gòu) ===")
        printer.print_directory()

# 程序主入口
if __name__ == "__main__":
    main()

到此這篇關(guān)于基于Python實(shí)現(xiàn)優(yōu)雅的目錄結(jié)構(gòu)打印工具的文章就介紹到這了,更多相關(guān)Python打印目錄結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Python編寫個(gè)語法解析器

    基于Python編寫個(gè)語法解析器

    這篇文章主要為大家詳細(xì)介紹了如何基于Python編寫個(gè)語法解析器,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-07-07
  • Pycharm直接使用遠(yuǎn)程服務(wù)器代碼并調(diào)試的解決方法

    Pycharm直接使用遠(yuǎn)程服務(wù)器代碼并調(diào)試的解決方法

    這篇文章主要介紹了Pycharm直接使用遠(yuǎn)程服務(wù)器代碼并調(diào)試的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • 淺談python 線程池threadpool之實(shí)現(xiàn)

    淺談python 線程池threadpool之實(shí)現(xiàn)

    這篇文章主要介紹了淺談python 線程池threadpool之實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • 使用Python制作一個(gè)翻譯器

    使用Python制作一個(gè)翻譯器

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)一個(gè)中英翻譯器,輸入中文或者英文,輸出對(duì)應(yīng)的英文或者中文,有需要的小伙伴可以參考一下
    2025-02-02
  • Python 字典dict使用介紹

    Python 字典dict使用介紹

    這篇文章主要介紹了Python 字典dict使用介紹,需要的朋友可以參考下
    2014-11-11
  • 教你如何編寫、保存與運(yùn)行Python程序的方法

    教你如何編寫、保存與運(yùn)行Python程序的方法

    這篇文章主要介紹了教你如何編寫、保存與運(yùn)行Python程序的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python+selenium實(shí)現(xiàn)QQ郵箱自動(dòng)發(fā)送功能

    python+selenium實(shí)現(xiàn)QQ郵箱自動(dòng)發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了python+selenium實(shí)現(xiàn)QQ郵箱自動(dòng)發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • python備份文件以及mysql數(shù)據(jù)庫的腳本代碼

    python備份文件以及mysql數(shù)據(jù)庫的腳本代碼

    最近正在學(xué)習(xí)python,看了幾天了,,所以寫個(gè)小腳本練習(xí)練習(xí),沒什么含金量,只當(dāng)練手
    2013-06-06
  • 手把手教你進(jìn)行Python虛擬環(huán)境配置教程

    手把手教你進(jìn)行Python虛擬環(huán)境配置教程

    這篇文章主要介紹了手把手教你進(jìn)行Python虛擬環(huán)境配置,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧,需要的朋友可以參考下
    2020-02-02
  • 淺析python字符串前加r、f、u、l 的區(qū)別

    淺析python字符串前加r、f、u、l 的區(qū)別

    這篇文章主要介紹了淺析python字符串前加r、f、u、l 的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01

最新評(píng)論

五大连池市| 故城县| 建瓯市| 玛多县| 乐至县| 山东| 西华县| 中卫市| 镇巴县| 太白县| 盐边县| 东方市| 延长县| 阳信县| 武平县| 久治县| 永仁县| 淮滨县| 潜江市| 诸暨市| 雅江县| 云和县| 定结县| 新野县| 临沭县| 庄河市| 孝感市| 滨州市| 萨嘎县| 延津县| 绥棱县| 宁都县| 丰镇市| 蒙山县| 略阳县| 崇礼县| 江陵县| 保德县| 庆云县| 南岸区| 嘉鱼县|