python3 如何 获取一个文件的目录,获取 上一级目录
1 _file_ 是什么 ?
# hello.py
if __name__ == '__main__':
file = __file__
print(f"file = {__file__!r}")
结果如下
file = ‘C:/Users/changfx/PycharmProjects/FirstDemo/demo/second_package/hello.py’
结果 是打印 file 的 路径
python datamodel.html
# -*- coding: utf-8 -*-
"""
# 看下 __file__ 这个变量的含义 ,
https://docs.python.org/3/reference/datamodel.html
__file__ is the pathname of the file from which the module was loaded, if it was loaded from a file.
The __file__ attribute may be missing for certain types of modules,
such as C modules that are statically linked into the interpreter;
for extension modules loaded dynamically from a shared library, it is the pathname of the shared library file.
"""
说明:
在 python 中 __file__ 是一个文件路径, 当 一个python 模块 被加载的时候, 它是从file load 进来的。
它是一个属性。 它是一个特殊的属性,这个属性就代表了 这个文件的路径。
按照官方文档的方法,这个 __file__ 属性 有可能 没有对于 某些特定的模块类型, 比如说 C 模块,它是直接 链接到解释器 。
对于从共享库动态加载的扩展模块,它是共享库文件的路径名。
from os.path import dirname
path = "C:/Users/changfx/PycharmProjects/FirstDemo/demo/second_package/hello.py"
print(dirname(path))
print(dirname(dirname(path)))
print(dirname(dirname(dirname(path))))
print(dirname(dirname(dirname(dirname(path)))))
从这里 就可以 获取 不同的目录 ,dirname 就可以拿到当前 文件所在的目录 , 多次使用 就可以 继续 拿到 上一级 目录 。
结果如下:
import os
from os.path import dirname
def get_path():
print('=== file ===')
print(__file__)
print('\n===获取当前目录 ===')
print(os.path.abspath(dirname(__file__)))
print("\n ===获取 当前文件的 上一级目录 === ")
# get package dir
package_dir = os.path.abspath(dirname(dirname(__file__)))
print(package_dir)
print("\n ===获取 当前文件的 上上一级目录 === ")
# print(os.path.abspath(os.path.join(os.getcwd(), "../..")))
print(os.path.abspath(dirname(dirname(dirname(__file__)))))
结果如下图:
2 如何获取文件的目录
如何获取文件的目录 以及 上一级目录,上上一级目录
可以封装几个函数 来获取 这些文件路径 。
还是以这个项目结构 为例, 写一个 hello.py
# -*- coding: utf-8 -*-
# hello.py
from os.path import dirname
from os.path import abspath
def get_current_dir():
"""
获取 当前文件所在 目录
:return:
"""
return abspath(dirname(__file__))
pass
def get_parent_dir():
"""
获取当前 文件的 目录 的 上一级 目录
:return:
"""
pass
return abspath(dirname(dirname(__file__)))
def get_double_parent_dir():
"""
获取当前 文件的目录 的 上一级 目录 的 父目录
:return:
"""
pass
return abspath(dirname(dirname(dirname(__file__))))
if __name__ == '__main__':
print(get_current_dir())
print(get_parent_dir())
print(get_double_parent_dir())
结果如下:
参考文档
stackoverflow https://stackoverflow.com/questions/9271464/what-does-the-file-variable-mean-do
————————————————
本文转载自:https://blog.csdn.net/u010339879/article/details/101781185