【发布时间】:2016-12-31 17:17:01
【问题描述】:
我在使用 Python 3.4.2 的 Jupyter Notebook 服务器 (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 (cmets) 的参考 How do I get the current IPython Notebook name 最后一个答案(不接受)非常适合我的需求:
print(os.getcwd())
/home/ubuntu/笔记本
【问题讨论】:
-
__file__适用于模块和 Python 脚本,不适用于笔记本。您找到的答案不适用于此处。
标签: python-3.x path jupyter