Python批量生成文件夹目录树清单:导出目录结构到文本
用Python递归遍历文件夹生成目录树清单,输出树形结构文本,支持导出到txt文件,方便分享项目结构或做文档目录。
场景痛点
向同事汇报项目结构,或者写文档需要列出文件夹和文件清单。手动在资源管理器里一层层截图,图太多反而看不清。用Python脚本递归遍历目录,生成一份带树形缩进的目录清单,导出成txt,直接贴文档或发消息都清晰。
用到的库
pathlib # 标准库
完整代码
from pathlib import Path
def generate_tree(
root_dir: str,
output_file: str = None,
ignore_dirs: list = None,
max_depth: int = None
) -> str:
"""
生成目录树清单
:param root_dir: 根目录
:param output_file: 输出txt路径,None则只打印到终端
:param ignore_dirs: 要忽略的目录名列表
:param max_depth: 最大递归深度,None不限制
"""
root = Path(root_dir).resolve()
ignore_dirs = set(ignore_dirs or [])
lines = [root.name + "/"]
def walk(current: Path, prefix: str, depth: int):
# 深度限制
if max_depth is not None and depth > max_depth:
return
# 列出当前目录的文件和子目录,目录在前文件在后
entries = sorted(current.iterdir(), key=lambda p: (p.is_file(), p.name.lower()))
entries = [e for e in entries if e.name not in ignore_dirs]
for idx, entry in enumerate(entries):
is_last = idx == len(entries) - 1
connector = "└── " if is_last else "├── "
lines.append(prefix + connector + entry.name + ("/" if entry.is_dir() else ""))
if entry.is_dir():
extension = " " if is_last else "│ "
walk(entry, prefix + extension, depth + 1)
walk(root, "", 1)
tree_text = "\n".join(lines)
if output_file:
Path(output_file).write_text(tree_text, encoding='utf-8')
print(f"目录树已保存到: {output_file}")
print(tree_text)
return tree_text
if __name__ == "__main__":
generate_tree(
root_dir="./myproject",
output_file="./目录树.txt",
ignore_dirs=['__pycache__', '.git', 'node_modules'],
max_depth=4
)
代码讲解
walk递归函数:每进入一层目录,用prefix记录当前缩进。最后一个条目用└──,中间的用├──,子层级前缀补│或,拼出标准树形结构。sorted(..., key=lambda p: (p.is_file(), p.name.lower())):目录排前面,文件排后面,同类按名称不区分大小写排序。输出看起来整齐。ignore_dirs:忽略__pycache__、.git、node_modules这类不需要出现在清单里的目录,避免噪音。max_depth:限制递归深度,项目目录太大时只看前几层,输出不会太长。Path.write_text(tree_text, encoding='utf-8'):把整棵树写成UTF-8文本文件,中文不会乱码。
运行结果
终端打印类似:
myproject/
├── data/
│ ├── input/
│ │ └── 源数据.csv
│ └── output/
│ └── 结果.xlsx
├── src/
│ ├── main.py
│ └── utils.py
├── README.md
└── requirements.txt
同时保存到目录树.txt,可以直接贴到文档里。
注意事项
- 目录里如果有名为
node_modules这种包含成千上万个文件的目录,不忽略的话生成会很慢。ignore_dirs参数很关键。 - 树形符号
├── └── │在某些老旧Windows终端可能显示为乱码,确保终端编码是UTF-8。导出的txt文件不受影响。 - 这是只读操作,不会修改任何文件,放心跑。

更新时间:2026-09-14 21:17:20