Python递归遍历Outlook文件夹时如何收集拼接完整路径
获取Outlook所有文件夹完整路径的修改方案
你只需要在递归调用时传递上级路径前缀,逐层拼接文件夹名即可,修改后的可直接运行代码如下:
import win32com.client def DumpFoldersRecursive(folders, parent_path=""): folder_paths = [] for i in range(1, folders.Count + 1): folder = folders[i] # 根目录无前缀,直接取文件夹名,其余层级拼接反斜杠 if not parent_path: current_path = folder.Name else: current_path = f"{parent_path}\\{folder.Name}" folder_paths.append(current_path) # 递归获取子文件夹路径并合并到结果列表 folder_paths.extend(DumpFoldersRecursive(folder.Folders, current_path)) return folder_paths def DumpOutlookFolders(): outlook = win32com.client.Dispatch("Outlook.Application") mapi_namespace = outlook.GetNamespace("MAPI") all_folder_paths = DumpFoldersRecursive(mapi_namespace.Folders) outlook = None # 打印所有路径,格式和你给出的示例完全匹配 for path in all_folder_paths: print(path) # 可选:将路径写入本地txt文件 # with open("outlook_folder_paths.txt", "w", encoding="utf-8") as f: # f.write("\n".join(all_folder_paths)) return all_folder_paths # 执行函数即可得到所有完整路径 all_paths = DumpOutlookFolders()
核心改动说明
- 移除了原代码中无用的
indent参数,替换为parent_path参数用于传递上层文件夹的完整路径 - 每遍历到一个文件夹就先拼接当前完整路径存入结果列表,再递归遍历子文件夹,将返回的子路径合并到当前列表
- 最终函数返回的列表中就包含了所有层级文件夹的完整路径
如果需要过滤特定路径(比如只保留收件箱相关路径),可以在输出时增加判断条件即可。
内容的提问来源于stack exchange,提问作者Erika
相关产品推荐
相关产品推荐

