一直以為我寫了關於路徑有關的博客,看了一圈才發現沒寫,那么現在就來整理下。
一、獲取當前路徑
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:\gitplay\Operate_system_ModeView_structure\20200511\路徑問題總結 打印當前文件路徑:F:\gitplay\Operate_system_ModeView_structure\20200511\路徑問題總結\play.py 打印當前文件路徑(1):F:\gitplay\Operate_system_ModeView_structure\20200511\路徑問題總結\play1.py 打印主程序路徑:F:\gitplay\Operate_system_ModeView_structure\20200511\路徑問題總結\play.py 打印主程序路徑(1):F:\gitplay\Operate_system_ModeView_structure\20200511\路徑問題總結\play.py 打印主程序目錄:F:\gitplay\Operate_system_ModeView_structure\20200511\路徑問題總結
要區分目錄和文件路徑:
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:\gitplay\Operate_system_ModeView_structure\20200511\路徑問題總結 打印當前文件目錄的上層目錄:F:\gitplay\Operate_system_ModeView_structure\20200511 打印當前目錄的上層目錄:F:\gitplay\Operate_system_ModeView_structure\20200511 打印當前目錄的上層目錄(2):F:\gitplay\Operate_system_ModeView_structure\20200511 打印當前目錄的上上級目錄:F:\gitplay\Operate_system_ModeView_structure 打印當前文件路徑:F:\gitplay\Operate_system_ModeView_structure\20200511\路徑問題總結\play.py 打印當前文件路徑(1):F:\gitplay\Operate_system_ModeView_structure\20200511\路徑問題總結\play1.py 打印主程序路徑:F:\gitplay\Operate_system_ModeView_structure\20200511\路徑問題總結\play.py 打印主程序路徑(1):F:\gitplay\Operate_system_ModeView_structure\20200511\路徑問題總結\play.py 打印主程序目錄:F:\gitplay\Operate_system_ModeView_structure\20200511\路徑問題總結 切換后的路徑:F:\
這些就是關於一般路徑的獲取問題了。