如何用Python递归实现任意层级自定义文件夹转字典?
递归实现任意层级自定义目录字典构建
我需要基于自定义的Folder类目录结构构建字典,注意这不是操作系统目录,没法用os库。现在的代码只能处理3层级子目录,想改成能处理任意层级的递归循环。
现有代码:
if isinstance(parentfolder, Folder): for child in parentfolder.child: subchildren = [] if isinstance(child, Folder): for subchild in child.child: if isinstance(subchild, Folder): subchildren.append({'folder' : subchild}) children.append({'folder' : subchildren}) DirDict.append({'folder' : parentfolder, 'children': children })
预期输出的字典结构(仅包含符合isinstance判断的Folder对象):
{'folder' : 'somefolder', 'children' : [{'folder' : 'somechildfolder', 'children' : [{'folder' : 'somegrandchildfolder', 'children': [...]}]}]}
解决方案
核心思路是写一个递归函数,每个Folder对象都调用这个函数生成自身的字典结构,同时递归处理它的所有子Folder。不管嵌套多少层,递归都会自动遍历处理。
实现代码:
def build_folder_dict(folder): # 过滤非Folder类型的对象 if not isinstance(folder, Folder): return None # 初始化当前文件夹的字典结构 folder_dict = {'folder': folder, 'children': []} # 遍历所有子项,递归处理每个子Folder for child in folder.child: child_dict = build_folder_dict(child) if child_dict is not None: folder_dict['children'].append(child_dict) return folder_dict # 使用示例:假设root_folder是最顶层的Folder对象 DirDict = [] root_dict = build_folder_dict(root_folder) if root_dict: DirDict.append(root_dict)
代码说明
- 递归函数
build_folder_dict先校验输入对象是否为Folder类型,不符合直接返回None; - 为当前Folder创建基础字典,包含自身引用和空的子节点列表;
- 遍历当前Folder的所有子项,对每个子项递归调用自身,若返回有效字典(即子项是Folder),就加入当前字典的
children列表; - 顶层调用后,将生成的完整目录字典加入
DirDict即可。
这种方式可以自动适配任意深度的嵌套目录结构,完全替代原有的固定层级循环逻辑。
内容的提问来源于stack exchange,提问作者richmake
相关产品推荐
相关产品推荐

