我在一台Jupyter Notebook服务器(v4.2.2)上使用Python 3.4.2和

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

但是正确的笔记本位置应该是/主页/ubuntu/笔记本电脑/.

感谢Martijn Pieters提供的参考100( comments ).最后一个答案(不接受)非常适合我的需要:

print(os.getcwd())

/主页/ubuntu/笔记本电脑

推荐答案

如果您想获取脚本运行目录的路径,我强烈建议使用,

os.path.abspath('')

Advantages

  • 它是从Jupyter Notebook开始工作的
  • 它从REPL开始工作
  • 它不需要Python 3.4的pathlib

请注意,__file__具有优势的一种情况是,当您从目录A调用python,但在目录B中运行脚本时.在这种情况下,上述方法以及大多数其他方法将返回A,而不是B.然而,对于Jupyter notbook,您始终会得到.ipyn文件的文件夹,而不是从启动jupyter notebook的目录.

Python-3.x相关问答推荐

为什么vs code返回错误—LocaleError:int对象没有属性where,但相同的代码运行在Google Colab上没有任何问题''''

是否有必要使用Threads()中的args显式地将共享变量传递给Python中的线程函数或直接访问它?

根据第一个字典的值序列对第二个字典进行排序

比较和排序 DataFrame 两列中的值并在 python 中的同一行中排序

三重奏:为什么频道被记录为使用async with,而不是with?

如何确保 GCP Document AI 模型输出与输入文件同名的 JSON?

仅当从 USB 摄像头接收到新图像时才处理图像

判断 gekko 中的表达式

为什么最简单的流光示例会出错?

使用一周的特定第一天将每日日期转换为每周

python tkInter 浏览文件夹按钮

你如何表达一个没有参数的 Python Callable?

日志(log)模块不适用于 Python3

逗号分隔列表的 argparse 操作或类型

Generic[T] 基类 - 如何从实例中获取 T 的类型?

如何将 cv2.imread 匹配到 keras image.img_load 输出

如何模拟 open(...).write() 而不会出现没有这样的文件或目录错误?

在 Ubuntu 上为 Python3 安装 mod_wsgi

如何从集合中删除多个元素?

在 Meta 中创建具有动态模型的通用序列化程序