Python:获取当前文件的路径以及上一级路径

准备工作

在使用Python过程中,经常会遇到会切换路径的情况,如:文件的打开、读取、写入等
根据网上资料学习并总结使用Python获取当前文件路径以及上一级路径的方法(使用os模块)。

  1. 学习os模块基本知识,本次会使用:os.getcwd()、os.path.dirname、os.path.abspath()、os.pardir、os.path.pardir、os.path、join();
  2. 准备测试路径,如下;
  3. 以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

小结
获取当前文件路径方法有:

  1. os.getcwd()
  2. 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

小结
获取当前文件上一级路径方法有:

  1. os.path.abspath(os.path.dirname(os.getcwd()))
  2. os.path.abspath(os.path.dirname(os.path.dirname(file)))
  3. os.path.abspath(os.path.join(os.path.dirname(file), '..'))
  4. os.path.abspath(os.path.join(os.getcwd(), os.path.pardir))
  5. os.path.abspath(os.path.join(os.getcwd(), '..'))
  6. ....

欢迎补充其他方法

推荐阅读更多精彩内容