我的知识记录

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__.gitnode_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文件不受影响。
  • 这是只读操作,不会修改任何文件,放心跑。

Python批量生成文件夹目录树清单:导出目录结构到文本

标签:

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

上一篇:Python获取文件大小修改时间:pathlib.stat详解

下一篇:Python批量查找最近修改文件教程