Databricks如何列出指定文件夹下的全部Notebook文件?
Databricks列出指定工作区文件夹下Notebook的解决方案
dbutils.fs.ls是用于操作DBFS(Databricks分布式文件系统)的接口,只能读取DBFS路径下的存储资源,而工作区(Workspace)中的Notebook存放在独立的工作区存储层,所以用这个方法无法查询到对应结果。你可以通过以下两种方式实现需求:
方法1:使用dbutils.workspace模块(推荐)
Databricks 11.0及以上运行时版本默认提供dbutils.workspace模块,直接调用其ls方法即可查询工作区资源:
# 替换为XXYY文件夹对应的完整工作区路径,例如/Users/your_email@domain.com/XXYY target_path = "/XXYY" # 列出目标路径下的所有工作区对象 workspace_items = dbutils.workspace.ls(target_path) # 筛选仅保留Notebook类型的对象 notebook_list = [item for item in workspace_items if item.object_type == "NOTEBOOK"] # 输出Notebook信息 for nb in notebook_list: print(f"Notebook名称:{nb.name},完整路径:{nb.path}")
如果需要递归遍历XXYY文件夹下所有子目录的Notebook,可以增加递归逻辑:
def list_all_notebooks(path): all_notebooks = [] for item in dbutils.workspace.ls(path): if item.object_type == "NOTEBOOK": all_notebooks.append(item) elif item.object_type == "DIRECTORY": all_notebooks.extend(list_all_notebooks(item.path)) return all_notebooks # 调用递归方法 all_notebooks = list_all_notebooks("/XXYY") for nb in all_notebooks: print(f"{nb.name} | {nb.path}")
方法2:调用Workspace REST API(兼容低版本运行时)
如果你使用的运行时版本低于11.0没有dbutils.workspace模块,可以直接调用工作区REST接口实现:
import requests # 自动获取当前环境的接口地址和认证凭证 api_url = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiUrl().get() api_token = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiToken().get() target_path = "/XXYY" resp = requests.get( f"{api_url}/api/2.0/workspace/list", headers={"Authorization": f"Bearer {api_token}"}, params={"path": target_path} ) resp.raise_for_status() items = resp.json().get("objects", []) # 筛选Notebook notebook_list = [item for item in items if item["object_type"] == "NOTEBOOK"] for nb in notebook_list: nb_name = nb["path"].split("/")[-1] print(f"Notebook名称:{nb_name},完整路径:{nb['path']}")
注意事项
- 调用前需要确认当前账号对目标
XXYY文件夹有可读权限,否则会触发权限报错。 object_type字段除了NOTEBOOK外,还支持DIRECTORY(文件夹)、LIBRARY(库)、REPO(代码仓库),可以按需调整筛选逻辑。
内容的提问来源于stack exchange,提问作者sys
相关产品推荐
相关产品推荐

