记录下os.path.dirname(__file__)使用

os.path.dirname(__file__)使用

该测试脚本所在的位置:D:\第1层\第2层\第3层\第4层\第5层\test11.py

test11.py

import os
#该文件所在位置:D:\第1层\第2层\第3层\第4层\第5层\test11.py

path1 = os.path.dirname(__file__)
print(path1)#获取当前运行脚本的绝对路径

path2 = os.path.dirname(os.path.dirname(__file__)) #
print(path2)#获取当前运行脚本的绝对路径(去掉最后一个路径)

path3 = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
print(path3)#获取当前运行脚本的绝对路径(去掉最后2个路径)

path4 = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
print(path4)#获取当前运行脚本的绝对路径(去掉最后3个路径)

path5 = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))
print(path5)#获取当前运行脚本的绝对路径(去掉最后4个路径)

path6 = os.__file__                  #获取os所在的目录
print(path6)
结果:
C:\Python352\python.exe D:/第1层/第2层/第3层/第4层/第5层/test11.py
D:/第1层/第2层/第3层/第4层/第5层
D:/第1层/第2层/第3层/第4层
D:/第1层/第2层/第3层
D:/第1层/第2层
D:/第1层
C:\Python352\lib\os.py

Process finished with exit code 0

解释:

http://blog.csdn.net/u011760056/article/details/46969883

os.path.dirname(__file__)返回脚本的路径,但是需要注意一下几点:
  • 必须是实际存在的.py文件,如果在命令行执行,则会引发异常NameError: name '__file__' is not defined;
  • 在运行的时候如果输入完整的执行的路径,则返回.py文件的全路径如:Python c:/test/test.py 则返回路径 c:/test ,如果是python test.py 则返回空;
  • 结合os.path.abspath用,效果会好,如果大家看过一些python架构的代码的话,会发现经常有这样的组合:os.path.dirname(os.path.abspath(__file__)),os.path.abspath(__file__)返回的是.py文件的绝对路径。

这就是os.path.dirname(__file__)的用法,其主要总结起来有:

  • 不要在命令行的形式来进行os.path.dirname(__file__)这种形式来使用这个函数;
  • 结合os.path.abspath()使用


<think>好的,我现在需要解释Python中os.path.dirname(__file__)的作用。用户已经提供了几个引用资料,我得仔细看看这些资料里的信息,然后整理出一个清晰的回答。 首先,根据引用[3],os.path.dirname(__file__)返回的是当前.py文件所在的目录,而os.path.abspath(__file__)返回的是文件的绝对路径。引用[5]提到,os.path.realpath(__file__)会得到脚本的绝对路径,然后用dirname去掉文件名,得到目录。这说明dirname的作用是去掉路径中的文件名部分,返回所在目录。 引用[2]比较了os.getcwd()os.path.dirname(os.path.realpath(__file__))的区别。用户的朋友用的是后者,而用户自己用的是前者。这里可能需要解释getcwd()返回的是当前工作目录,而dirname(__file__)返回的是脚本所在的目录,这两者可能不同,尤其是当脚本被其他目录调用时。 接下来,我需要结合这些信息,说明__file__变量的含义。根据引用[4]中的例子,当使用os.path.dirname(__file__)时,如果__file__是相对路径,返回的也是相对路径的目录部分。而加上realpath或abspath可以确保得到绝对路径,这样更可靠。 还要注意引用[1]中的示例代码,直接打印os.path.dirname(__file__)的结果,可能得到空字符串或者相对路径,这取决于脚本的执行方式。因此,通常建议结合abspath或realpath来获取绝对路径,如引用[3]和[5]所示。 总结起来,需要分步骤说明: 1. __file__变量代表当前脚本的文件名(包括路径)。 2. os.path.dirname()函数的作用是去掉文件名,返回目录部分。 3. 单独使用dirname(__file__)可能得到相对路径,结合abspath或realpath可以转为绝对路径。 4. 对比getcwd()dirname(realpath(__file__))的区别,强调后者更准确。 同时,用户提供的引用中多次提到这些函数的组合使用,比如os.path.dirname(os.path.realpath(__file__)),需要解释每一步的作用,并说明为什么这样用更可靠。 最后,生成的相关问题需要覆盖常见的疑问,比如相对路径与绝对路径的区别,如何获取当前脚本的绝对路径,以及与其他方法如getcwd()的对比等。</think>### Python中`os.path.dirname(__file__)`的功能解释 在Python中,`os.path.dirname(__file__)`用于获取当前脚本的**目录路径**。具体作用可分为以下几步分析: 1. **`__file__`变量的含义** `__file__`是Python内置变量,表示当前执行脚本的文件名(含路径)。例如,若脚本路径为`/home/user/project/app.py`,则`__file__`的值为`"app.py"`(相对路径)或完整绝对路径,具体取决于调用方式[^3][^5]。 2. **`os.path.dirname()`的作用** 该函数用于提取路径中的目录部分。例如: - 输入路径为`/home/user/project/app.py` → 输出为`/home/user/project` - 输入路径为`app.py` → 输出为空字符串`''`[^3][^4]。 3. **组合使用示例** - **`os.path.dirname(__file__)`**:直接获取当前脚本的目录路径(可能是相对路径或绝对路径)[^3]。 - **`os.path.dirname(os.path.realpath(__file__))`**: 1. `os.path.realpath(__file__)`:解析符号链接并返回绝对路径(如`/home/user/project/app.py`)。 2. `dirname`提取其目录部分(如`/home/user/project`)[^2]。 此组合方式更可靠,确保路径为绝对路径。 4. **与`os.getcwd()`的区别** - `os.getcwd()`返回当前**工作目录**(脚本被调用时的目录),而`os.path.dirname(__file__)`返回脚本**实际存储的目录**。 - 例如:若在`/tmp`目录下执行`python /home/user/project/app.py`,则`getcwd()`返回`/tmp`,而`dirname(__file__)`返回`/home/user/project`[^2]。 #### 典型应用场景 ```python import os # 获取当前脚本的绝对路径目录 script_dir = os.path.dirname(os.path.abspath(__file__)) print(f"脚本目录:{script_dir}") # 组合路径(避免硬编码) config_path = os.path.join(script_dir, "config.json") ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值