【发布时间】:2019-05-08 11:28:24
【问题描述】:
我一直在尝试获取打开的 .py 文件(使用 Spyder)的位置,该文件将用于链接各种文件并使用 __file__ 名称,以便任何机器都可以从其当前目录运行。
问题是当我尝试时:
location = os.path.abspath(os.path.dirname(__file__))
它给了我错误:
NameError: name '__file__' is not defined
我通过将文件作为字符串而不是 name 文件变量调用来绕过这一点:
location = os.path.abspath(os.path.dirname('__file__'))
这可以让我获得文件的父目录,但不能获得文件所在的实际文件夹:
location = 'C:\Users\......\Scripts'
当真正的位置在:
location = 'C:\Users\......\Scripts\ISO'
我尝试了 abspath 和 dirname 和 realpath 的各种组合来获取文件所在的 true 目录,但我无法获取它。
我做错了什么?
【问题讨论】:
-
它在内置模块或交互式 shell 中不起作用。你的背景是什么?您是否在某个时候删除了
__file__? -
os.path.dirname('__file__')返回空白。它只是计算文件名的目录名,它是空字符串,并且返回当前目录的绝对路径。 -
不,
__file__仍然存在于下载它的原始目录中。这个文件是用 Spyder 从目录中打开的,如果你问的是这个? -
@HelloToEarth 您正在使用 Spyder 交互式 shell?那可能也没有定义
__file__。请使用python3可执行文件运行python 脚本。不要相信 IDE 甚至 python 的 REPL 100% 等同于运行脚本 -
仅供参考:如果您处于交互式会话中,您可以简单地使用
os.getcwd()获取当前目录。没有__file__,因为您没有执行文件……您正在交互式地创建命令,所以有__file__是没有意义的。
标签: python python-3.x path operating-system directory