sys.path.append() :

1、python本身不支持跨目录调用文件
2、该语句的目的是为了将父目录加入到sys.path (python的搜索模块的路径)
3、使得python可以导入父目录下的任何目录中的任何文件
4、是一个设定语句
5、当我们导入一个模块时:import xxx,默认情况下python解析器会搜索当前目录、已安装的内置模块和第三方模块,搜索路径存放在sys模块的path中
6、sys.path 返回的是一个列表!
该路径已经添加到系统的环境变量了,当我们要添加自己的搜索目录时,可以通过列表的append()方法;对于模块和自己写的脚本不在同一个目录下,在脚本开头加sys.path.append():
在这里插入图片描述

例:

1、python在 执行 atm.py 脚本,脚本调用 setting.py 和main.py 模块。
2、由于调用的模块不在同级目录和同一文件下,直接调用会报错: ModuleNotFoundError: No module named ‘conf’
3、跨目录调用文件,要在执行文件开头添加命令:sys.path.append(),将两个文件的父目录添加到sys.path列表中,即图中:Atm文件夹的目录的路径
在这里插入图片描述

import  os
import  sys
# 打印文件绝对路径(absolute path)
print (os.path.abspath(__file__))                                                          
# 打印文件的目录路径(文件的上一层目录),这个时候是在 bin 这一层。
print (os.path.dirname( os.path.abspath(__file__) ))                                       
# 打印文件的目录路径(文件的上两层目录), 这个时候是在 atm 这一层。就是os.path.dirname这个再用了一次
print (os.path.dirname(os.path.dirname( os.path.abspath(__file__) )))                      
# 要调取其他目录下的文件。 需要在atm这一层才可以
BASE_DIR=  os.path.dirname(os.path.dirname( os.path.abspath(__file__) ))                   
# 将这个路径添加到环境变量中。
sys.path.append( BASE_DIR  )                                                               
#  根据目录调取程序(文件)

from  conf import setting                                                                  
# 根据目录调取程序(文件)
from  foo import  main                                                                     

#直接执行程序 
setting   
#执行程序中的函数                                                                                   
main.login()   
   

os.path.abspath 与 os.path.dirname

# 打印文件绝对路径(absolute path)
print (os.path.abspath(__file__))                                                          
# 打印文件的目录路径(文件的上一层目录),这个时候是在 bin 这一层。
print (os.path.dirname( os.path.abspath(__file__) ))                                       
# 打印文件的目录路径(文件的上两层目录), 这个时候是在 atm 这一层。就是os.path.dirname这个再用了一次
print (os.path.dirname(os.path.dirname( os.path.abspath(__file__) )))  


# 打印文件的目录路径,这个时候是在 bin 这一层。
print (os.path.dirname(__file__))                                                          
# 打印文件的目录路径, 这个时候是在 atm 这一层。就是os.path.dirname这个再用了一次
print (os.path.dirname( os.path.dirname(__file__) ))                                                            
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐