[关闭]
@ghimi 2018-10-09T09:55:21.000000Z 字数 2138 阅读 825

Python 内置 __file__ 变量

Python


__file__ 获取当前文件的路径

  1. #!/usr/bin/env python
  2. # -*- coding:utf8 -*-
  3. print(__file__) #__file__ : 获取当前文件路径
  4. # 输出
  5. # H:/py/index.py

会经常用到__file__,一般配合os模块的os.path.dirname(),os.path.basename(),os.path.join()模块函数来使用

  1. #!/usr/bin/env python
  2. # -*- coding:utf8 -*-
  3. import os
  4. a = __file__ # __file__ 全局变量获取当前文件路径
  5. print(a)
  6. b = os.path.dirname(a) # 获取文件/文件夹当前目录:注意 : os.path.dirname() 叠加一次向上找一次 如下:
  7. print(b)
  8. b2 = os.path.dirname(b) # 获取文件当前目录的上级目录,注意 : os.path.dirname() 叠加一次向上找一次
  9. c = os.path.basename(a) # 获取文件名称
  10. print(c)
  11. # 输出
  12. # H:/py/lib/ska/mk.py
  13. # H:/py/lib/ska
  14. # H:/py/lib
  15. # mk.py

用 __file__ 获取模块路径,添加到解释器模块路径里

  1. #!/usr/bin/env python
  2. # -*- coding:utf8 -*-
  3. import sys
  4. import os
  5. a = __file__ # __file__ 全局变量获取当前路径
  6. print(a)
  7. b = os.path.dirname(a) # 获取文件当前目录
  8. pring(b)
  9. c = "lib" # 自定义文件目录名称
  10. d = os.path.join(b,c) # 将获取文件当前目录,与自定义文件目录名称,拼接成完整的路径
  11. print(d)
  12. print("\n")
  13. sys.path.append(d) # 将拼接好的路径,添加到解释器模块路径中
  14. for i in sys.path:
  15. print(i)
  16. #输出
  17. # H:/py/index.py
  18. # H:/py
  19. # H:/py\lib
  20. #
  21. #
  22. # H:\py
  23. # C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\site-packages\pip-8.1.2-py3.5.egg
  24. # H:\py
  25. # C:\Users\admin\AppData\Local\Programs\Python\Python35\python35.zip
  26. # C:\Users\admin\AppData\Local\Programs\Python\Python35\DLLs
  27. # C:\Users\admin\AppData\Local\Programs\Python\Python35\lib
  28. # C:\Users\admin\AppData\Local\Programs\Python\Python35
  29. # C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\site-packages
  30. # H:/py\lib

__package__ :获取导入文件的路径,多层目录以点分割,注意:对当前文件返回None

  1. #!/usr/bin/env python
  2. # -*- coding:utf8 -*-
  3. print(__package__) #注意:对当前文件返回None
  4. from lib.ska import mk #导入mk模块文件
  5. print(mk.__package__) #__package__ :获取导入文件的路径,多层目录以点分割,注意:对当前文件返回None
  6. #输出
  7. # None
  8. # lib.ska
  9. # lib.ska

__name__ 【重点】获取导入文件的路径加文件名称,路径以点分割,注意:获取当前文件返回__main__

  1. #!/usr/bin/env python
  2. # -*- coding:utf8 -*-
  3. print(__name__) #注意:获取当前文件返回__main__
  4. from lib.ska import mk #导入mk模块文件
  5. print(mk.__name__) #获取导入文件的路径加文件名称,路径以点分割
  6. #输出
  7. # __main__
  8. # lib.ska.mk

__name__ 全局变量写在入口文件里,只有执行入口文件时的返回值才是__main__ ,如果入口文件被导入到别的文件里,此时入口文件的__name__返回值就不在是__main__,而是如果文件的路径加入口文件名称,所以我们可以用__name__全局变量来防止别人盗链入口文件

  1. #!/usr/bin/env python
  2. # -*- coding:utf8 -*-
  3. if __name__ == "__main__": #__name__ 全局变量写在入口文件里,只有执行入口文件时的返回值才是__main__ ,如果入口文件被导入到别的文件里,此时入口文件的__name__返回值就不在是__main__,而是如果文件的路径加入口文件名称,所以我们可以用__name__全局变量来防止别人盗链入口文件
  4. print("执行")
  5. #这样只有执行index文件时才执行判断里的,index被导入到到别的文件,就不会执行判断里的
  6. 复制代码
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注