python中__file__变量和path模块的配合使用

本文深入探讨了Python中处理文件路径的技巧,包括使用__file__变量获取文件的完整路径,利用os.path模块进行路径操作,如获取绝对路径、文件名、目录名,以及连接目录和文件等。这些技巧对于维护复杂的项目目录结构尤其重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个项目中的目录结构往往很复杂,模块之间互相调用来调用去。同时,相同的文件结构也会被部署到不同的环境。这也就意味着,引用文件的时候如果采用绝对路径的方式,到了后期是很难维护的。这一节我们来看看使用相对路径的一些方法。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

__file__变量

首先是__file__变量,其表示的是使用该变量的文件的完整路径。

有目录结构如下

(file) [fuhx@testmachine module1]$ tree 
.
├── class1.py
└── class2.py

0 directories, 2 files

只有两个文件,其中class1.py的内容如下

#/usr/bin/env python

def func1():
    print(__file__)


if __name__ == '__main__':
    func1()

此时运行该文件结果如下

/home/fuhx/python_projects/file/module1/class1.py

显示了class1.py文件的完整路径。

如果是引用别的文件中的变量,则显示被引用文件的位置。

文件class2.py的内容如下

#!/usr/bin/env python

def func2():
    print(__file__)

class1.py中运行func2

#/usr/bin/env python

import os
import class2


def func1():
    print(__file__)
    class2.func2()


if __name__ == '__main__':
    func1()

结果如下

/home/fuhx/python_projects/file/module1/class1.py
/home/fuhx/python_projects/file/module1/class2.py

不过需要注意一下,我在pycharm里面运行的时候都是好好的,在terminal中跑文件的时候有时候只会显示文件名,而不是完整路径,这时候就得借助os.path.abspath这个函数了。

下面详细说说path模块。

path模块

这里说的path是os模块下的path,其用于处理一些和路径相关的操作。

例如上面所说的获取绝对路径

#/usr/bin/env python

import os
import sys
import class2


def func1():
    #print(__file__)
    print(os.path.abspath(__file__))
    # class2.func2()


if __name__ == '__main__':
    func1()

这样修改一下,不管是如何执行class1.py文件,得到的结果都是一样的

/home/fuhx/python_projects/file/module1/class1.py

获取文件名

print(os.path.basename(__file__))

结果为

class1.py

获取目录名

通常用于获取同目录下的文件的绝对路径

print(os.path.dirname(__file__))

结果为

/home/fuhx/python_projects/file/module1

当然os.getcwd()也可以获取到当前目录

连接目录和文件

获取了目录名以后就可以通过连接来获取文件的完整路径了

#/usr/bin/env python

import os
import sys
import class2


def func1():
    with open(os.path.join(os.path.dirname(__file__),'xiaofu.txt'),'a') as f:
        f.write('life is beautiful')


if __name__ == '__main__':
    func1()

这里的func1就会在class1.py的相同目录创建一个叫xiaofu.txt的文件并写入内容

获取上级目录

使用两次os.path.dirname就可以获得上级目录,多级目录以此类推

print(os.path.dirname(os.path.dirname(__file__)))

结果为

/home/fuhx/python_projects/file

总结

基本上有了这几个方法,再配合__file__,在脚本里面去获取任意位置文件的绝对路径都不成问题了。当然os.path还有很多有用的方法,例如判断是否是文件,是否是目录等等,不在这里的讨论范围了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值