我在使用 Python 3.4.2 的 Jupyter 笔记本 服务器 (v4.2.2) 上,我想使用全局名称 __file__
,因为笔记本将从其他用户那里克隆,在一个部分中我必须跑:
def __init__(self, trainingSamplesFolder='samples', maskFolder='masks'):
self.trainingSamplesFolder = self.__getAbsPath(trainingSamplesFolder)
self.maskFolder = self.__getAbsPath(maskFolder)
def __getAbsPath(self, path):
if os.path.isabs(path):
return path
else:
return os.path.join(os.path.dirname(__file__), path)
__getAbsPath(self, path)
检查 path
参数是相对路径还是绝对路径,并返回 path
的绝对版本。所以我可以稍后安全地使用返回的 path
。
但我得到了错误
NameError:名称
'__file__'
未定义
我在网上搜索了这个错误,找到了我应该更好地使用 sys.argv[0]
的“解决方案”,但是 print(sys.argv[0])
返回
/usr/local/lib/python3.4/dist-packages/ipykernel/__main__.py
但正确的笔记本位置应该是 /home/ubuntu/notebooks/
。
感谢您的参考 _如何从 Martijn Pieters 获取当前的 IPython Notebook 名称_(评论)最后的答案(未接受)非常适合我的需要:
print(os.getcwd())
/home/ubuntu/笔记本
原文由 Fabian 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您想获取脚本运行目录的路径,我强烈建议您使用,
优点
请注意,
__file__
有优势的一种情况是,当您从目录 A 调用 python 但在目录 B 中运行脚本时。在这种情况下,上面以及大多数其他方法将返回 A,而不是 B。但是对于Jupyter notbook,你总是得到文件夹.ipyn
文件而不是你启动的目录jupyter notebook
。