python跨平臺程序之java
——淺談python的相對路徑與絕對路徑python
轉載請註明出處http://blog.csdn.net/porcupinefinal/(尊重勞動成果)linux
對於python入門不久的同志這多是一個比較頭疼的問題,但對老鳥來講可能已是老生常談了。因爲網上關於這方面的資料很少,因此這道菜更主要是爲小鳥準備的,雖然我也仍是一支小鳥 :)。也歡迎老鳥們品嚐,並提出您們寶貴的意見。windows
Python是一門跨平臺的語言,但並非說你用python隨便寫的一個程序就能在不一樣的平臺都能運行。而相對路徑和絕對路徑是這方面的典型(至少我這麼認爲)(相對路徑在windows下可行,而在linux下提示找不到相應的文件路徑),由於linux和windows自己結構就存在着較大的差別,而這差別也給寫擴平臺的程序形成了困難。我本身嘗試過兩種方法來解決這個問題,下邊就與你們一塊兒分享。app
The first one :程序中涉及路徑時先區分系統類型,再根據不一樣的操做系統做不一樣的處理。Python目前支持如下操做系統的識別:'posix', 'nt', 'mac', 'os2', 'ce', 'java', 'riscos',我也沒有徹底試驗過,不過目前主流的應用系統是windows,linux和unix也在蓬勃的發展,因此咱們主要區分它們就好了。通常我用一個if…else語句來區分,菜鳥的作法,老鳥們怎麼作呢?spa
if os.name == 」nt」操作系統
windows路徑…….net
Elseunix
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),而後系統中訪問文件用相對路徑一說,但我試了一下好像有問題(你們能夠嘗試一下,讓我也分享大家的勞動成果:))