os.path.dirname(__file__) 返回空值

194 投票
8 回答
302268 浏览
提问于 2025-04-17 04:25

我想获取当前目录的路径,也就是执行.py文件时所在的文件夹。

比如说,有一个简单的文件 D:\test.py,里面的代码是:

import os

print os.getcwd()
print os.path.basename(__file__)
print os.path.abspath(__file__)
print os.path.dirname(__file__)

奇怪的是,输出结果是:

D:\
test.py
D:\test.py
EMPTY

我本来希望 getcwd()path.dirname() 的结果是一样的。

既然 os.path.abspath = os.path.dirname + os.path.basename,那为什么

os.path.dirname(__file__)

会返回空值呢?

8 个回答

10
os.path.split(os.path.realpath(__file__))[0]

os.path.realpath(__file__)会返回当前脚本的绝对路径;而 os.path.split(abspath)[0] 则会返回当前目录。

13

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。

有些时候,我们会遇到一些问题,比如数据的格式不对,或者数据不完整。这就像是你想把水倒进一个小瓶子,但水桶里的水太多,瓶子装不下。

为了避免这些问题,我们可以使用一些工具和方法来确保数据的质量和格式是正确的。这样,我们就能顺利地把数据从一个地方转移到另一个地方,而不会出现错误。

总之,处理数据就像是搬运东西,我们需要确保每一步都做得正确,这样才能顺利完成任务。

import os.path

dirname = os.path.dirname(__file__) or '.'
296

因为 os.path.abspath = os.path.dirname + os.path.basename 这个等式是不成立的,所以我们更倾向于这样理解。

os.path.dirname(filename) + os.path.basename(filename) == filename

其实 dirname()basename() 这两个函数只是把你传入的文件名分成几个部分,并没有考虑到当前的目录。如果你想要考虑当前目录,就得明确地去做。

如果你想获取绝对路径的目录名,可以使用:

os.path.dirname(os.path.abspath(__file__))

撰写回答