1、當咱們在進行文件操做的時候,首先得知道文件的具體位置才能利用內置函數open()打開,而文件的這個「位置」又有「絕對」與「相對」之分。python
咱們能夠這樣理解:文件的「絕對路徑」絕大多數狀況下只有在咱們本身的電腦上纔有效,除非不一樣的電腦裏這兩個文件存放的盤符與路徑徹底一致。例如,張三作的一個項目裏有一個名爲whw.txt的文件存放着一些用戶需求信息,該文件在張三電腦裏的存放路徑爲:D:\user\whw.txt;有一天張三去忙另一個項目把現有的程序交給李四維護,一樣的文件whw.txt在李四的電腦裏存放的路徑變成了E:\Python\exercise\ex11\whw.txt,若是程序裏面還用張三以前的存放路徑確定會報錯。對於李四而言雖然只要將文件的存放路徑按照張三以前的路徑改動一下就能夠了,可是,對於一個大項目有幾十個甚至上百個文件、一個團隊十幾人共同維護代碼的狀況下,必須強制全部人都得按照一樣的規範進行文件存放,這樣勢必給開發帶來沒必要要的冗餘甚至麻煩。linux
2、而「相對路徑」是解決這個問題的最好的方式,它並不糾結於文件具體的存放位置,只要先找到編程人員「源程序運行的位置」,而後在源程序的根目錄下添加該文件相對於源程序的目錄便可。具體操做方式以下:編程
如上圖所示,咱們的源程序1.py有一個相同目錄下的path文件夾裏的rtr.txt文件須要操做。windows
首先,咱們利用os模塊找到源程序的路徑並將它賦值給變量BASE_DIR:函數
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
找到源程序在咱們本電腦的路徑後,咱們只要把path文件夾裏的rtr.txt文件再「追加」到這個存放着源程序目錄的變量 BASE_DIR 後面便可:spa
_path_rtr1 = os.path.join(BASE_DIR,'path','rtr.txt')
程序的運行效果以下:操作系統
3、其實,關於相對路徑的「追加」除了os.path.join()方法 以外還有一種方式,就拿上面的例子來說,咱們也能夠這樣追加:code
_path_rtr2 = BASE_DIR + r'\path\rtr.txt'
效果以下:blog
運行效果與os.path.join()方法一致。可是兩者的區別又在哪裏呢?ci
這與程序運行的操做系統有關。
咱們知道,文件在linux的目錄格式爲E:/practice/exercise/PRACTICE,而windows操做系統下的格式是:E:\practice]\exercise\PRACTICE。兩者斜槓的方向不一樣。很顯然,若是咱們用第二種方式去追加文件的相對路徑,該程序僅能在windows下運行,而第一種方式生成的路徑會根據操做系統的不一樣生成不一樣的目錄格式。咱們都知道python的一大優點即是「跨平臺」,因此在實際中建議你們用os.path.join()方法去生成文件的相對路徑。