【问题标题】:Unable to obtain actual directory for __file__ Python无法获取 __file__ Python 的实际目录
【发布时间】: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'

我尝试了 abspathdirnamerealpath 的各种组合来获取文件所在的 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


【解决方案1】:

因为我在 Spyder shell 中运行脚本,所以它没有输出正确的工作目录,因为工作目录设置与文件路径不对齐。

这个可以通过Run -> Configuration per file -> The directory of the file being executed解决

但是使用__file__运行脚本更有效的方法是从脚本所在目录下的python3.X.exe文件运行脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    相关资源
    最近更新 更多