@ghimi
2018-10-09T09:55:21.000000Z
字数 2138
阅读 931
Python
#!/usr/bin/env python# -*- coding:utf8 -*-print(__file__) #__file__ : 获取当前文件路径# 输出# H:/py/index.py
会经常用到__file__,一般配合os模块的os.path.dirname(),os.path.basename(),os.path.join()模块函数来使用
#!/usr/bin/env python# -*- coding:utf8 -*-import osa = __file__ # __file__ 全局变量获取当前文件路径print(a)b = os.path.dirname(a) # 获取文件/文件夹当前目录:注意 : os.path.dirname() 叠加一次向上找一次 如下:print(b)b2 = os.path.dirname(b) # 获取文件当前目录的上级目录,注意 : os.path.dirname() 叠加一次向上找一次c = os.path.basename(a) # 获取文件名称print(c)# 输出# H:/py/lib/ska/mk.py# H:/py/lib/ska# H:/py/lib# mk.py
用 __file__ 获取模块路径,添加到解释器模块路径里
#!/usr/bin/env python# -*- coding:utf8 -*-import sysimport osa = __file__ # __file__ 全局变量获取当前路径print(a)b = os.path.dirname(a) # 获取文件当前目录pring(b)c = "lib" # 自定义文件目录名称d = os.path.join(b,c) # 将获取文件当前目录,与自定义文件目录名称,拼接成完整的路径print(d)print("\n")sys.path.append(d) # 将拼接好的路径,添加到解释器模块路径中for i in sys.path:print(i)#输出# H:/py/index.py# H:/py# H:/py\lib### H:\py# C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\site-packages\pip-8.1.2-py3.5.egg# H:\py# C:\Users\admin\AppData\Local\Programs\Python\Python35\python35.zip# C:\Users\admin\AppData\Local\Programs\Python\Python35\DLLs# C:\Users\admin\AppData\Local\Programs\Python\Python35\lib# C:\Users\admin\AppData\Local\Programs\Python\Python35# C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\site-packages# H:/py\lib
__package__ :获取导入文件的路径,多层目录以点分割,注意:对当前文件返回None
#!/usr/bin/env python# -*- coding:utf8 -*-print(__package__) #注意:对当前文件返回Nonefrom lib.ska import mk #导入mk模块文件print(mk.__package__) #__package__ :获取导入文件的路径,多层目录以点分割,注意:对当前文件返回None#输出# None# lib.ska# lib.ska
__name__ 【重点】获取导入文件的路径加文件名称,路径以点分割,注意:获取当前文件返回__main__
#!/usr/bin/env python# -*- coding:utf8 -*-print(__name__) #注意:获取当前文件返回__main__from lib.ska import mk #导入mk模块文件print(mk.__name__) #获取导入文件的路径加文件名称,路径以点分割#输出# __main__# lib.ska.mk
__name__ 全局变量写在入口文件里,只有执行入口文件时的返回值才是__main__ ,如果入口文件被导入到别的文件里,此时入口文件的__name__返回值就不在是__main__,而是如果文件的路径加入口文件名称,所以我们可以用__name__全局变量来防止别人盗链入口文件
#!/usr/bin/env python# -*- coding:utf8 -*-if __name__ == "__main__": #__name__ 全局变量写在入口文件里,只有执行入口文件时的返回值才是__main__ ,如果入口文件被导入到别的文件里,此时入口文件的__name__返回值就不在是__main__,而是如果文件的路径加入口文件名称,所以我们可以用__name__全局变量来防止别人盗链入口文件print("执行")#这样只有执行index文件时才执行判断里的,index被导入到到别的文件,就不会执行判断里的复制代码