一直以为我写了关于路径有关的博客,看了一圈才发现没写,那么现在就来整理下。
一、获取当前路径
os.getcwd()
二、获取当前文件路径:(__file__是当前执行文件)
os.path.abspath(__file__)
三、获取主程序路径
os.path.abspath(sys.argv[0])
四、获取主程序目录
os.path.abspath(sys.path[0])
接下来举个例子看下,创建了两个文件,运行play.py程序。
play.py
#!/usr/bin/env python # _*_ coding: UTF-8 _*_ """================================================= @Project -> File : Operate_system_ModeView_structure -> play.py @IDE : PyCharm @Author : zihan @Date : 2020/5/11 14:40 @Desc : =================================================""" from play1 import * if __name__ == '__main__': # 获取当前路径 print("打印当前路径:", end='') print(os.getcwd()) # 获取当前文件的路径(__file__是当前执行的文件) print("打印当前文件路径:", end='') print(os.path.abspath(__file__)) # 用play1.py里面的函数打印__file__的路径 print("打印当前文件路径(1):", end='') print_file_path() # 打印主程序的路径 print("打印主程序路径:", end='') print(os.path.abspath(sys.argv[0])) # 用play1.py里面的函数打印主程序路径 print("打印主程序路径(1):", end='') print_main_path() # 打印主程序目录 print("打印主程序目录:", end='') print(os.path.abspath(sys.path[0]))
play1.py
#!/usr/bin/env python # _*_ coding: UTF-8 _*_ """================================================= @Project -> File : Operate_system_ModeView_structure -> play1.py @IDE : PyCharm @Author : zihan @Date : 2020/5/11 14:58 @Desc : =================================================""" import os import sys def print_file_path(): print(os.path.abspath(__file__)) def print_main_path(): print(os.path.abspath(sys.argv[0]))
运行结果:
打印当前路径:F:gitplayOperate_system_ModeView_structure20200511路径问题总结 打印当前文件路径:F:gitplayOperate_system_ModeView_structure20200511路径问题总结play.py 打印当前文件路径(1):F:gitplayOperate_system_ModeView_structure20200511路径问题总结play1.py 打印主程序路径:F:gitplayOperate_system_ModeView_structure20200511路径问题总结play.py 打印主程序路径(1):F:gitplayOperate_system_ModeView_structure20200511路径问题总结play.py 打印主程序目录:F:gitplayOperate_system_ModeView_structure20200511路径问题总结
要区分目录和文件路径:
1. os.getcwd()获取的是当前路径,得到的是当前目录,如果在程序运行过程中有路径切换,那么执行os.getcwd()得到的值是不同的
2. __file__是当前执行的文件,打印__file__的路径,就是当前文件的路径
3. sys.argv[0]是主文件的路径,不管引用了多少个py文件,它始终都是主文件的路径,不会变。
4. sys.path[0]是主程序的目录路径,它同样始终都是主程序的目录,不会变。
参考链接:https://www.cnblogs.com/xiyuan2016/p/9187695.html
五、获取上级目录
os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
os.path.abspath(os.path.dirname(os.getcwd()))
os.path.abspath(os.path.join(os.getcwd(), ".."))
六、获取上上级目录
os.path.abspath(os.path.join(os.getcwd(), "../.."))
七、切换路径
os.chdir(path)
play.py
#!/usr/bin/env python # _*_ coding: UTF-8 _*_ """================================================= @Project -> File : Operate_system_ModeView_structure -> play.py @IDE : PyCharm @Author : zihan @Date : 2020/5/11 14:40 @Desc : =================================================""" from play1 import * if __name__ == '__main__': # 获取当前路径 print("打印当前目录:", end='') print(os.getcwd()) # 获取上层目录 print("打印当前文件目录的上层目录:", end='') print(os.path.abspath(os.path.dirname(os.path.dirname(__file__)))) print("打印当前目录的上层目录:", end='') print(os.path.abspath(os.path.dirname(os.getcwd()))) print("打印当前目录的上层目录(2):", end='') print(os.path.abspath(os.path.join(os.getcwd(), ".."))) # 获取上上级目录 print("打印当前目录的上上级目录:", end='') print(os.path.abspath(os.path.join(os.getcwd(), "../.."))) # 获取当前文件的路径(__file__是当前执行的文件) print("打印当前文件路径:", end='') print(os.path.abspath(__file__)) # 用play1.py里面的函数打印__file__的路径 print("打印当前文件路径(1):", end='') print_file_path() # 打印主程序的路径 print("打印主程序路径:", end='') print(os.path.abspath(sys.argv[0])) # 用play1.py里面的函数打印主程序路径 print("打印主程序路径(1):", end='') print_main_path() # 打印主程序目录 print("打印主程序目录:", end='') print(os.path.abspath(sys.path[0])) # 切换路径到根路径 path = "F:/" os.chdir(path) print("切换后的路径:", end='') print(os.getcwd())
运行结果:
打印当前目录:F:gitplayOperate_system_ModeView_structure20200511路径问题总结 打印当前文件目录的上层目录:F:gitplayOperate_system_ModeView_structure20200511 打印当前目录的上层目录:F:gitplayOperate_system_ModeView_structure20200511 打印当前目录的上层目录(2):F:gitplayOperate_system_ModeView_structure20200511 打印当前目录的上上级目录:F:gitplayOperate_system_ModeView_structure 打印当前文件路径:F:gitplayOperate_system_ModeView_structure20200511路径问题总结play.py 打印当前文件路径(1):F:gitplayOperate_system_ModeView_structure20200511路径问题总结play1.py 打印主程序路径:F:gitplayOperate_system_ModeView_structure20200511路径问题总结play.py 打印主程序路径(1):F:gitplayOperate_system_ModeView_structure20200511路径问题总结play.py 打印主程序目录:F:gitplayOperate_system_ModeView_structure20200511路径问题总结 切换后的路径:F:
这些就是关于一般路径的获取问题了。