BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 分析

在 Django 的项目中, settings.py 配置文件都会有如下一句代码,表示当前 Django 项目的根目录,这句代码中包含着 Python 标准库的一些函数知识,这里就根据这句代码涉及到的几个知识点进行分析讲解:

1.__file__

__file__ 是模块文件(即 .py 文件)的一个属性,返回当前模块文件所在的路径,例如在 E 盘下,当前的项目结构如下:

 PythonProject
│  test.py

打印 __file__ 返回的结果,可以看到其返回的结果是当前模块文件所在的路径:

print(__file__)

# 运行结果:
E:/PythonProject/test.py

2.os.path.abspath(path)

  • os.path.abspath() 是 os 模块当中的一个函数,这个函数接收一个 path 路径对象,返回 path 标准化的绝对路径。
  • 在 Linux 系统中,路径分隔符为斜杠 “/”,在 Windows 系统下,路径分隔符为反斜杠 “\”
print(os.path.abspath(__file__))

# 运行结果:
E:\PythonProject\test.py

3.os.path.dirname()

  • os.path.dirname() 是 os 模块当中的一个函数,这个函数接收一个 path 路径对象,返回路径 path 的父目录名称。
  • 这是将 path 传入函数 split() 之后,返回的一对值中的第一个元素。
    os.path.split(path)
    • 将路径 path 拆分为一对,即 (head, tail),其中,tail 是路径的最后一部分,而 head 里是除最后部分外的所有内容。
    • tail 部分不会包含斜杠,如果 path 以斜杠结尾,则 tail 将为空。
    • 如果 path 中没有斜杠,head 将为空。
    • 如果 path 为空,则 head 和 tail 均为空。
    • head 末尾的斜杠会被去掉,除非它是根目录(即它仅包含一个或多个斜杠)。
    • 简单地说 os.path.split(path) 的作用就是返回 path 的上级目录。
# os.path.dirname() 调用的时候调用 os.path.split()
print(os.path.split(os.path.abspath(__file__)))

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

运行结果:

('E:\\PythonProject', 'test.py')
E:\PythonProject

4.依据上面几个知识点的分析讲解,可知下面这段代码的运行结果为:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIR)

# 运行结果:
E:\

猜你喜欢

转载自blog.csdn.net/qq_44214671/article/details/111769656