如何动态获取Databricks Notebook的路径?

How to get the path of the Databricks Notebook dynamically?

请不要为 IPython/Jupyter 笔记本提供解决方案。技术不同。

我想动态获取我的 Databricks 笔记本的路径。这是我可以从 UI“复制文件路径”中获得的内容,如下所示。我无法使用 __file__,因为那会给我错误。

NameError: name '__file__' is not defined

如果您有类似的东西,可以通过检查 globals()locals() 找到,例如

print(globals())

就我而言,我发现最接近的是:

_dh

例如:

print(_dh)
# ['/media/win10/Users/norok2/Downloads']

每个笔记本都有所谓的“上下文”,其中包含很多关于环境的信息,包括 HTTP 路径、主机名等。它可以作为 Python dict 检索,类似这样(它更简单转换为 JSON 并返回而不是通过 .get 函数获取字段):

import json
ctx = json.loads(dbutils.notebook.entry_point.getDbutils().notebook().getContext().toJson())

ctx 词典中有一个名为 extraContext 的子词典,其中包含您需要的字段 notebook_path:

nb_path = ctx['extraContext']['notebook_path']