python跨平台程式之 ——淺談python的相對路徑與絕對路徑[zz] 轉載請註明出處http://blog.csdn.net/porcupinefinal/(尊重勞動成果) 對於python入門不久的同志這可能是一個比較頭疼的問題,但對老鳥來說可能已經是老生常談了。由於網上關於這方面的資料不多,所以這道菜更主要是為小鳥準備的,雖然我也還是一支小鳥 :)。也歡迎老鳥們品嘗,並提出您們寶貴的意見。 Python 是一門跨平台的語言,但並不是說你用python隨便寫的一個程式就能在不同的平台都能運行。而相對路徑和絕對路徑是這方面的典型(至少我這麼認為)(相 對路徑在windows下可行,而在linux下提示找不到相應的檔案路徑),因為linux和windows本身結構就存在著較大的差異,而這差異也給 寫擴平台的程式造成了困難。我自己嘗試過兩種方法來解決這個問題,下邊就與大家一起分享。 The first one :程 序中涉及路徑時先區分系統類別型,再根據不同的作業系統作不同的處理。Python目前支援以下作業系統的識別:'posix', 'nt', 'mac', 'os2', 'ce', 'java', 'riscos',我也沒有完全實驗過,不過目前主流的應用系統是windows,linux和unix也在蓬勃的發展,所以我們主要區分它們就行了。一 般我用一個if…else語句來區分,菜鳥的做法,老鳥們怎麼做呢? if os.name == ”nt”: windows路徑…… else: Linux路徑…… 小節:這種方法較笨,非常不靈活,但這樣做解決了同一個程式可以同時在windows和linux下運行而不需要改動的問題 The second one :這 種方法相對靈活的將相對路徑轉化為不同作業系統的絕對路徑,我相對喜歡這種方法 :)。 For example :你寫了一個小系統,所有檔案和子檔案夾都放在一個f:/school的主資料夾裡,這個主資料夾下有class、teacher、student、 log等檔案夾,有main.py這個小系統的主檔案,還有好一些subfile.py的檔案。而主資料夾在linux的路徑可能為/home/kkk /school,其他相對的路徑和windows中相同。那麼怎樣同一他們呢?在main.py中定義一個全域變數path,賦值於path = os.path.abspath(os.path.dirname(sys.argv[0]))。這個path在windows下運行它的值為 “f:/school”,而在linux下運行它的值為“/home/kkk/school”,寫到這估計大家也知道我想幹啥了,如果在程式中要訪問(讀 寫)記錄檔可以用path+“/log/kk.log”來表示檔案的路徑 :)。 小節:此方法相對於第一種方法靈活,需要注意的是path+“/log/kk.log”,我們一般喜歡用path+//log//kk.log這樣的方式,但這樣在linux中就行不通了,提示找不到檔案路徑 註:網上還有在主程式中加入sys.path.append(path),然後系統中訪問檔案用相對路徑一說,但我試了一下好像有問題(大家可以嘗試一下,讓我也分享你們的勞動成果:)) |