重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
概述
成都服务器托管,创新互联建站提供包括服务器租用、西云机房、带宽租用、云主机、机柜租用、主机租用托管、CDN网站加速、域名申请等业务的一体化完整服务。电话咨询:028-86922220
使用os.path.abspath()函数来获取文件绝对路径
解析
文件目录结构如下:
假设app.py中想读取config.ini文件的内容,首先app.py需要知道config.ini的文件路径,从目录结构上可以看出,config.ini与app.py的父目录同级,也就是获取到app.py父目录(bin文件夹的路径)的父目录(config文件夹路径)的绝对路径再拼上config.ini文件名就能获取到config.ini文件:
首先,在app.py中测试一下:
import os
def load_file():
# 获取当前文件路径
current_path = os.path.abspath(__file__)
# 获取当前文件的父目录
father_path = os.path.abspath(os.path.dirname(current_path) + os.path.sep + ".")
# config.ini文件路径,获取当前目录的父目录的父目录与congig.ini拼接
config_file_path=os.path.join(os.path.abspath(os.path.dirname(current_path) + os.path.sep + ".."),'config.ini')
print('当前目录:' + current_path)
print('当前父目录:' + father_path)
print('config.ini路径:' + config_file_path)
load_file()
#out:
从结果中可以看到一切都正常,没有什么问题,假如现在需要从main.py中执行app.py的load_file()方法呢?
来测试一下:
main.py(处于同级目录):
from bin.app import load_file
if __name__=='__main__':
load_file()
#out:
可以看到,获取的路径是完全没有问题的
拓展内容
python os.path 常用模块介绍
os.path.abspath(path) 返回path规范化的绝对路径(但这个路径不一定是真实的路径),如果path仅是一个文件名,使用该函数后返回的路径是当前工作目录路径连接改文件名后所组成的新的路径名。
import os.path
os.path.abspath("a.py")
'C:\\Users\\Administrator\\a.py'
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.split("C:\\Users\\Administrator\\a.py")
('C:\\Users\\Administrator', 'a.py')
os.path.dirname(path) 返回path的目录,其实就是os.path.split(path)的第一个元素
os.path.dirname("C:\\Users\\Administrator\\a.py")
'C:\\Users\\Administrator'
os.path.basename(path) 返回path最后的文件名。如果path以/或\结尾,就会返回空值。即os.path.split(path)的第二个元素。
os.path.basename("C:\\Users\\Administrator\\a.py")
'a.py'
os.path.commonprefix(list) 返回list中所有path共有的最长的路径,从左向右,相同字符。
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False。
os.path.isabs(path) 如果path是绝对路径,返回True。
os.path.normpath(path) 规范path字符串形式(规范文件路径)
os.path.isfile(path) 判断路径是否为文件,是返回True,否则返回False
os.path.isdir(path) 如果path是一个存在的目录,返回True,否则返货False。
os.path.islink(path) 是否是链接;但如果系统不支持链接,则返回False。
自己组合吧。用os.getcwd得到当前工作目录。os.chdir改变当前目录
import os
os.chdir("/usr/local/include")
os.getcwd()
'/usr/local/include'
路径有两种,相对路径和绝对路径。 对于Unix-Like系统来说,绝对路径就是以/开头的路径。 相对路径就是不以/开头的路径。
其实,操作系统中实际只有一种路径,那就是绝对路径。 相对路径,只是程序自己帮我们修改为绝对路径了。
操作系统的程序运行器利用环境变量,为我们把相对路径生成为绝对路径。getcwd()函数用于得到当前进程的当前工作路径。也就是相对路径的起始点。
在Python中,可以使用os.chdir函数切换当前工作路径。
当前工作路径,是程序执行时所在的路径。 我们在哪个目录下执行程序,当前路径就是哪一个目录。
我们常常需要在python中执行一些源码目录下的文件。如,我们可能需要用eval动态执行一个python源文件。或者copy一些配置文件到目标系统的路径下。此时,我们无法知道这些文件的绝对路径,因为我们不能预知用户会把我们的程序安装到哪一个目录下。
我们也不能依赖于当前工作路径。因为用户很可能不在我们的源码目录下执行我们的程序。
那么,此时我们如何得到源码目录下文件的绝对路径呢?
我是这样做的:
ABSPATH=None
if __name__ == '__main__':
ABSPATH=os.path.abspath(sys.argv[0])
ABSPATH=os.path.dirname(ABSPATH)+"/"
print ABSPATH