准备工作
在使用Python过程中,经常会遇到会切换路径的情况,如:文件的打开、读取、写入等
根据网上资料学习并总结使用Python获取当前文件路径以及上一级路径的方法(使用os模块)。
- 学习os模块基本知识,本次会使用:os.getcwd()、os.path.dirname、os.path.abspath()、os.pardir、os.path.pardir、os.path、join();
- 准备测试路径,如下;
- 以test2.py文件为例,由下可见,test2.py文件路径为:F:\test\test1\test2\test2.py。
欢迎补充其他方法
F:\TEST
│ test.py
│
└─test1
└─test2
test2.py
os模块操作
# test2.py文件当前路径,也就是:F:\test\test1\test2
# -----------------------------获取当前文件路径-----------------------------
import os
print(os.getcwd()) # 输出:F:\test\test1\test2
print(os.path.dirname(__file__)) # 获取当前文件的父目录,此方法生成的并不是绝对路径,输出:F:/test/test1/test2
print(os.path.abspath(os.path.dirname(__file__))) # 使用os.path.abspath()方法,输出:F:\test\test1\test2
小结
获取当前文件路径方法有:
- os.getcwd()
- os.path.abspath(os.path.dirname(file))
# test2.py文件的上一级路径,也就是:F:\test\test1
# -----------------------------获取当前文件的上一级路径-----------------------------
import os
# 方法1:os.path.dirname():获取文件路径 + os.getcwd()
print(os.getcwd()) # 由上面使用可看出,os.getcwd()获取的是当前文件路径,输出:F:\test\test1\test2
# 使用os.path.dirname()方法
print(os.path.dirname(os.getcwd())) # 输出:F:\test\test1
# 转换为上一级地址的获取绝对路径
print(os.path.abspath(os.path.dirname(os.getcwd())))
# 方法2:os.path.dirname():获取文件路径 + __file__
print(__file__) # 获取当前文件路径,包含当前文件,输出:F:/test/test1/test2/test2.py
print(os.path.dirname(__file__)) # 输出:F:/test/test1/test2
print(os.path.dirname(os.path.dirname(__file__))) # 输出:F:/test/test1
# 转换为上一级地址的获取绝对路径
print(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
# 方法3:os.path.join(os.getcwd(),'..') # .. 为父目录
print(os.pardir) # 获取父目录,返回‘..’
print(os.path.pardir) # 获取父目录,返回‘..’
'''
源码ntpath.py文件内,有兴趣的同学可以试试
curdir = '.'
pardir = '..'
extsep = '.'
sep = '\\'
pathsep = ';'
altsep = '/'
defpath = '.;C:\\bin'
devnull = 'nul'
'''
print(os.path.join(os.getcwd(), '..')) # 输出:F:\test\test1\test2\..
print(os.path.abspath(os.path.join(os.getcwd(), '..'))) # 输出:F:\test\test1
print(os.path.abspath(os.path.join(os.getcwd(), os.path.pardir))) # 也可使用os.pardir或os.path.pardir
print(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) # 输出:F:\test\test1
小结:
获取当前文件上一级路径方法有:
- os.path.abspath(os.path.dirname(os.getcwd()))
- os.path.abspath(os.path.dirname(os.path.dirname(file)))
- os.path.abspath(os.path.join(os.path.dirname(file), '..'))
- os.path.abspath(os.path.join(os.getcwd(), os.path.pardir))
- os.path.abspath(os.path.join(os.getcwd(), '..'))
- ....
欢迎补充其他方法