文章目录
- tree.py 不带class类
- tree_details 带class类
问ai时,反复需要描述项目结构,描述的不清,生成的方案大大不同。
先拿到项目结构丢给ai,再问问题准确率就会大大提高。
试了几种方法,如choco的tree,python的原生方法等。
实测原生python就很快,那就它了。
注:tree.py和tree_details.py都要创建在根目录下,千万别画蛇添足,放到utils目录下。
tree.py 不带class类
项目根目录下创建tree.py,代码:
importos# 直接跳过这些目录,不扫描!IGNORE={"venv",".venv","__pycache__",".git",".idea",".vscode"}defshow(path,prefix=""):items=sorted([fforfinos.listdir(path)iffnotinIGNORE])foridx,nameinenumerate(items):is_last=idx==len(items)-1connector="└── "ifis_lastelse"├── "print(f"{prefix}{connector}{name}")full=os.path.join(path,name)ifos.path.isdir(full):new_prefix=prefix+(" "ifis_lastelse"│ ")show(full,new_prefix)if__name__=="__main__":show(".")tree_details 带class类
项目根目录下创建tree_details,代码:
importosimportast# 自动跳过的目录IGNORE={"venv",".venv","__pycache__",".git",".idea",".vscode","node_modules"}# 获取一个 .py 文件里的所有 class 名称defget_classes(file_path):try:withopen(file_path,"r",encoding="utf-8")asf:tree=ast.parse(f.read())classes=[node.namefornodeinast.walk(tree)ifisinstance(node,ast.ClassDef)]returnclassesexcept:return[]# 打印树形结构 + classdefshow(path,prefix=""):items=sorted([fforfinos.listdir(path)iffnotinIGNORE],key=lambdax:(0ifos.path.isdir(os.path.join(path,x))else1,x))foridx,nameinenumerate(items):full_path=os.path.join(path,name)is_last=idx==len(items)-1connector="└── "ifis_lastelse"├── "# 打印文件/文件夹print(f"{prefix}{connector}{name}")# 如果是文件夹 → 递归ifos.path.isdir(full_path):new_prefix=prefix+(" "ifis_lastelse"│ ")show(full_path,new_prefix)# 如果是 .py 文件 → 打印里面的 classelifname.endswith(".py"):classes=get_classes(full_path)ifclasses:new_prefix=prefix+(" "ifis_lastelse"│ ")forcinclasses:print(f"{new_prefix}─── class:{c}")if__name__=="__main__":print("📁 项目结构(含所有 class)\n")show(".")print("\n✅ 已自动跳过 venv / 第三方库")