用Python輸出一個文件夾的所有文件結構

輸出一個文件夾的所有目錄和文件結構

新建一個Python文件,輸入

這個文件表示查詢一個文件夾所有的目錄結構

import osdef print_directory_structure(root_dir):"""打印樹狀目錄結構(優化版)"""if not os.path.exists(root_dir):print(f"錯誤:路徑 {root_dir} 不存在")returnif not os.path.isdir(root_dir):print(f"錯誤:{root_dir} 不是一個目錄")returnroot_name = os.path.basename(os.path.normpath(root_dir))print(f"{root_name}/")  # 根目錄標題# 遞歸輔助函數(處理層級縮進和符號)def traverse_dir(current_dir, prefix, is_last):"""current_dir: 當前遍歷的目錄路徑prefix: 層級前綴(用于繪制豎線/空格)is_last: 是否是父目錄的最后一個子項"""# 獲取當前目錄下的子目錄和文件(先目錄后文件)entries = sorted(os.listdir(current_dir), key=lambda x: (not os.path.isdir(os.path.join(current_dir, x)), x))dirs = [e for e in entries if os.path.isdir(os.path.join(current_dir, e))]files = [e for e in entries if not os.path.isdir(os.path.join(current_dir, e))]all_entries = dirs + files  # 先目錄后文件的順序# 遍歷所有子項for i, entry in enumerate(all_entries):is_last_entry = (i == len(all_entries) - 1)entry_path = os.path.join(current_dir, entry)# 連接符號:最后一個項用└──,其他用├──connector = '└── ' if is_last_entry else '├── '# 顯示行(目錄加/,文件不加)line = f"{connector}{entry}/" if os.path.isdir(entry_path) else f"{connector}{entry}"print(f"{prefix}{line}")# 下一層級的前綴:如果當前是最后一個項,用空格;否則用豎線if not is_last_entry:next_prefix = prefix + "│   "else:next_prefix = prefix + "    "# 遞歸處理子目錄(僅目錄需要繼續遍歷)if os.path.isdir(entry_path):traverse_dir(entry_path, next_prefix, is_last_entry)# 從根目錄的子項開始遞歸(根目錄本身已打印,前綴為空)traverse_dir(root_dir, "", is_last=True)if __name__ == "__main__":# 移除輸入路徑兩端的單引號和雙引號target_dir = input("請輸入文件夾路徑: ").strip().strip('"\'')print_directory_structure(target_dir)

運行文件

輸入文件夾路徑例如"C:\Users\86195\Desktop\java_demo\untitled1",輸入的路徑帶不帶雙引號都行

帶雙引號

不帶雙引號

進階操作

可以把一個文件夾a的目錄結構信息存到txt文件中,然后根據txt文件在任意文件夾b生成文件夾a以及它的子文件

新建Python文件1.py

這個文件表示查詢文件夾的所有目錄結構,把目錄結構信息輸出到控制臺和寫入txt文件,如果txt文件有內容就覆蓋

import osdef print_directory_structure(root_dir, output_file=None):"""打印樹狀目錄結構(支持輸出到文件)"""if not os.path.exists(root_dir):msg = f"錯誤:路徑 {root_dir} 不存在"print(msg)if output_file: print(msg, file=output_file)returnif not os.path.isdir(root_dir):msg = f"錯誤:{root_dir} 不是一個目錄"print(msg)if output_file: print(msg, file=output_file)returnroot_name = os.path.basename(os.path.normpath(root_dir))display_line = f"{root_name}/"print(display_line)if output_file: print(display_line, file=output_file)  # 輸出到文件def traverse_dir(current_dir, prefix, is_last, output_file):entries = sorted(os.listdir(current_dir), key=lambda x: (not os.path.isdir(os.path.join(current_dir, x)), x))dirs = [e for e in entries if os.path.isdir(os.path.join(current_dir, e))]files = [e for e in entries if not os.path.isdir(os.path.join(current_dir, e))]all_entries = dirs + filesfor i, entry in enumerate(all_entries):is_last_entry = (i == len(all_entries) - 1)entry_path = os.path.join(current_dir, entry)connector = '└── ' if is_last_entry else '├── 'line = f"{connector}{entry}/" if os.path.isdir(entry_path) else f"{connector}{entry}"display_line = f"{prefix}{line}"print(display_line)  # 輸出到控制臺if output_file: print(display_line, file=output_file)  # 輸出到文件next_prefix = prefix + ("│   " if not is_last_entry else "    ")if os.path.isdir(entry_path):traverse_dir(entry_path, next_prefix, is_last_entry, output_file)traverse_dir(root_dir, "", is_last=True, output_file=output_file)if __name__ == "__main__":target_dir = input("請輸入文件夾路徑(帶不帶雙引號均可): ").strip().strip('"')txt_path = input("請輸入txt文件保存路徑(帶不帶雙引號均可): ").strip().strip('"')# 打開文件并覆蓋寫入(若文件不存在則創建)with open(txt_path, 'w', encoding='utf-8') as f:print_directory_structure(target_dir, f)print(f"目錄結構已成功保存到 {txt_path}(文件已覆蓋)")

新建Python文件2.py

這個文件表示根據txt文件的信息在一個文件夾新建目錄結構

import os
import redef rebuild_from_txt(txt_path, target_parent_dir):"""根據txt文件重建目錄結構"""# 讀取并清洗txt內容with open(txt_path, 'r', encoding='utf-8') as f:lines = [line.rstrip('\n') for line in f if line.strip()]  # 跳過空行if not lines:print("錯誤:txt文件內容為空")return# 解析根目錄(第一行必須是"根目錄名/")root_line = lines[0]if not root_line.endswith('/'):print(f"錯誤:txt文件格式錯誤,第一行應為根目錄(以/結尾),當前第一行:{root_line}")returnroot_dir_name = root_line[:-1]  # 去除末尾的/target_root_dir = os.path.join(target_parent_dir, root_dir_name)# 創建根目錄(若已存在則跳過)try:os.makedirs(target_root_dir, exist_ok=True)print(f"創建根目錄:{target_root_dir}")except Exception as e:print(f"根目錄創建失敗:{e}")return# 維護當前層級的目錄棧(保存各層目錄名)dir_stack = [root_dir_name]  # 初始為根目錄名# 正則匹配行結構(處理縮進和符號)line_pattern = re.compile(r'^(\s*)(├── |└── )(.*?)(/?)$')for line in lines[1:]:  # 第一行已處理,從第二行開始match = line_pattern.match(line)if not match:print(f"警告:無法解析行(格式錯誤):{line},跳過")continueprefix_space, _, name, is_dir_flag = match.groups()is_dir = is_dir_flag == '/'  # 目錄以/結尾# 計算當前層級(每個層級占4個字符:如"│   "或"    ")current_depth = len(prefix_space) // 4 + 1  # 根目錄是層級0,子目錄層級從1開始# 調整目錄棧長度(確保棧長度等于當前層級)while len(dir_stack) > current_depth:dir_stack.pop()  # 層級變淺,彈出深層目錄if len(dir_stack) < current_depth:print(f"警告:行結構不完整(層級跳躍):{line},跳過")continue# 拼接當前路徑current_parent = os.path.join(target_parent_dir, *dir_stack)current_path = os.path.join(current_parent, name)# 創建目錄或文件try:if is_dir:os.makedirs(current_path, exist_ok=True)dir_stack.append(name)  # 目錄入棧,用于下一層級print(f"創建目錄:{current_path}")else:# 創建空文件(確保父目錄存在)os.makedirs(current_parent, exist_ok=True)with open(current_path, 'w', encoding='utf-8'):pass  # 空文件print(f"創建文件:{current_path}")except Exception as e:print(f"創建失敗:{current_path},錯誤:{e}")if __name__ == "__main__":txt_path = input("請輸入txt文件路徑(帶不帶雙引號均可): ").strip().strip('"')target_parent = input("請輸入目標父文件夾路徑(帶不帶雙引號均可): ").strip().strip('"')rebuild_from_txt(txt_path, target_parent)print("目錄結構重建完成!")

新建txt文件

運行1.py文件

文件夾路徑例如我輸入

C:\Users\86195\Desktop\1新建文件夾\1

表示把文件夾1的目錄信息在控制臺輸出并且在txt文件中寫入,目錄信息包括文件夾1

所有輸入的文件路徑帶不帶雙引號都可以

運行2.py文件

例如目標父文件夾路徑我輸入

C:\Users\86195\Desktop\java_demo

會根據txt中的文件信息在java_demo文件夾下新建一個文件夾1和它的所有子文件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906153.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906153.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906153.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

R語言的專業網站top5推薦

李升偉 以下是學習R語言的五個頂級專業網站推薦&#xff0c;涵蓋教程、社區、資源庫和最新動態&#xff1a; 1.R項目官網 (r-project.org) R語言的官方網站&#xff0c;提供軟件下載、文檔、手冊和常見問題解答。特別適合初學者和高級用戶&#xff0c;是獲取R語言核心資源的…

IntelliJ IDEA給Controller、Service、Mapper不同文件設置不同的文件頭注釋模板、Velocity模板引擎

通過在 IntelliJ IDEA 中的 “Includes” 部分添加多個文件頭模板&#xff0c;并在 “Files” 模板中利用這些包含來實現不同類型文件的注釋。以下是為 Controller、Service、Mapper 文件設置不同文件頭的完整示例&#xff1a; 1. 設置 Includes 文件頭模板 File > Settin…

LabVIEW雙音信號互調失真測量

該VI構建實現了一套完整的雙音信號互調失真&#xff08;IMD&#xff09;測量系統。該系統通過精確控制信號生成、采集與分析流程&#xff0c;實現對被測設備&#xff08;DUT&#xff09;非線性特性的量化評估&#xff0c;可廣泛應用于通信設備、音頻系統、射頻器件等領域的研發…

56.合并區間(java)

題目描述&#xff1a; 1.先判斷給定intervals是否為空或者大小是否為1&#xff0c;是則直接返回intervals。 2.對intervals進行排序 數組形式則使用&#xff1a;Arrays.sort(intevals,(a,b)->Integer.compare(a[0],b[0])); ArrayList形式&#xff1a;intervals.sort((a,b)-…

Redis設計與實現——Redis命令參考與高級特性

Redis命令參考 數據類型相關命令 SET&#xff1a;設置鍵值&#xff0c;支持過期時間、不存在/存在條件。GET&#xff1a;獲取鍵值&#xff0c;若鍵不存在返回 nil。INCR/DECR&#xff1a;將鍵的整數值增1/減1&#xff0c;鍵不存在時初始化為0。MSET/MGET&#xff1a;批量設置…

基于 STM32 的全自動洗車監控系統設計與實現

摘要 本文提出一種基于 STM32F103RCT6 芯片的全自動洗車監控系統方案,通過多傳感器融合與智能控制算法,實現車輛檢測、洗車流程自動化及狀態遠程監控。系統集成硬件選型、電路設計、軟件流程及通信功能,可廣泛應用于智能洗車場景。 一、硬件系統設計 1. 核心芯片選型 主控…

掌握Multi-Agent實踐(七):基于AgentScope分布式模式實現多智能體高效協作[并行加速大模型輔助搜索、分布式多用戶協同辯論賽]

之前的案例都是運行在單臺機器上以單進程形式運行,受限于 Python 的全局解釋器鎖,實際只能有效利用一個 CPU 的計算資源,并且無法支持多個用戶從自己的電腦上接入同一個 Multi-Agent 應用進行交互。?為了提高運行效率并支持多用戶接入同一個應用中,AgentScope 提供了分布式…

docker-compose部署項目(springboot服務)以及基礎環境(mysql、redis等)ruoyi-ry

上傳jar 配置文件等 到目錄&#xff1a;/home/ruoyi/docker 設置權限 chmod x *.sh 開通端口&#xff08;我已經開通了&#xff09; sh ./deploy.sh port 開始構建 docker-compose build 構建成功 可以先拉取鏡像 docker pull nacos/nacos-server docker pull nginx docker …

Axure疑難雜癥:統計分析頁面引入Echarts示例動態效果

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:統計分析頁面引入Echarts示例動態效果 主要內容:echart示例引入、大小調整、數據導入 應用場景:統計分析頁面…

如何使用WordPress創建美食博客

不管你是否意識到&#xff0c;食物是我們生活的核心。有些人將其用作燃料&#xff0c;而另一些人則將食譜作為一種藝術形式呈現。如果您屬于后者&#xff0c;并且想創建一個美食博客來分享您的熱情&#xff0c;那么WordPress是一個頂級平臺。 幾乎每個話題都有一個博客利基&am…

【MySQL】庫與表的操作

一、庫的操作 1. 查看數據庫 語法&#xff1a;show databases;這里的database是要加s的 查看當前自己所處的數據庫&#xff1a;select database(); 例如下圖&#xff0c;我當前所處的數據庫就是在class1數據庫 2. 創建數據庫 語法&#xff1a;create database [if not e…

Unity3D開發AI桌面精靈/寵物系列 【六】 人物模型 語音口型同步 LipSync 、梅爾頻譜MFCC技術、支持中英文自定義編輯- 基于 C# 語言開發

Unity3D開發AI桌面精靈/寵物系列 【六】 人物模型 語音口型同步 LipSync 、梅爾頻譜MFCC技術 C# 語言開發 該系列主要介紹怎么制作AI桌面寵物的流程&#xff0c;我會從項目開始創建初期到最終可以和AI寵物進行交互為止&#xff0c;項目已經開發完成&#xff0c;我會仔細梳理一下…

MoonBit正式入駐GitCode!AI時代的編程語言新星,開啟高性能開發新紀元

在AI與編程語言深度交融的今天&#xff0c;開發者們正見證一場技術生產力的革命。由IDEA研究院基礎軟件中心傾力打造的MoonBit&#xff08;月兔&#xff09;編程語言&#xff0c;自2023年橫空出世以來&#xff0c;憑借高性能、低延遲、輕量化的特性&#xff0c;迅速成為全球開發…

LLMs:《POE報告:2025年春季人工智能模型使用趨勢》解讀

LLMs&#xff1a;《POE報告&#xff1a;2025年春季人工智能模型使用趨勢》解讀 導讀&#xff1a;2025年5月13日&#xff0c;該報告基于 Poe 平臺的用戶數據&#xff0c;分析了 2025 年春季人工智能模型的使用趨勢。報告指出&#xff0c;人工智能格局快速演變&#xff0c;通用文…

STM32 之網口資源

1 網口資源介紹 STM32F407 是 STMicroelectronics 推出的高性能 ARM Cortex-M4 微控制器&#xff0c;具備多種外設接口&#xff0c;其中包括一個 Ethernet MAC 控制器&#xff08;帶 IEEE 1588 支持&#xff09;。這意味著你可以使用 STM32F407 實現網絡通信功能&#xff08;通…

Almalinux中出現ens33 ethernet 未托管 -- lo loopback 未托管 --如何處理:

解決 AlmaLinux 中網絡接口 ens33 和 lo 顯示為“未托管”的問題 當 AlmaLinux 系統中的網絡接口&#xff08;如 ens33 和 lo&#xff09;顯示為“未托管”時&#xff0c;這意味著這些接口沒有被 NetworkManager 正常管理。以下是詳細的分析和解決方案&#xff1a; 1. 檢查 N…

數據庫中關于查詢選課問題的解法

前言 今天上午起來復習了老師上課講的選課問題。我總結了三個解法以及一點注意事項。 選課問題介紹 簡單來說就是查詢某某同學沒有選或者選了什么課。然后查詢出該同學的姓名&#xff0c;學號&#xff0c;課程號&#xff0c;課程名之類的。 sql文件我上傳了。大家可以嘗試練…

Qt圖表庫推薦指南與分析

目錄 一、核心圖表庫橫向對比1. Qt Charts2. QCustomPlot3. QWT (Qt Widgets for Technical Applications)4. KD Chart 二、性能與功能對比矩陣三、選型策略與組合方案1. 通用型需求&#xff1a;2. 技術型場景&#xff1a;3. 企業級開發&#xff1a; 四、未來趨勢與避坑指南1. …

LangGraph 2 - 智能體開發、流式傳輸、模型調用、工具、MCP、上下文、內存、人機協同、部署、UI

文章目錄 使用LangGraph進行智能體開發什么是智能體&#xff1f;核心特性高層構建模塊包生態系統 運行代理基礎用法輸入與輸出輸入格式使用自定義 Agent 狀態 輸出格式流式輸出最大迭代次數其他資源 流式傳輸代理進度監控LLM 令牌工具更新流式多模態傳輸禁用流式傳輸其他資源 L…

Android同屏采集并推送RTMP和啟動輕量級RTSP服務技術實踐

隨著視頻直播需求的不斷提升&#xff0c;如何實現高效的實時視頻采集和推流&#xff0c;成為了開發者們關注的重點。本文將結合大牛直播SDK&#xff0c;介紹如何在 Android 平臺實現 同屏采集、推送 RTMP 流&#xff0c;以及如何啟動輕量級 RTSP 服務&#xff0c;讓開發者快速搭…