windows和linux路徑斜槓不兼容問題

該篇文章提供了一個比較好的思路,感謝作者。

------------------------------------------------------------------

這兩天寫python腳本時發現一個問題,就是windows系統和linux系統的路徑問題,windows系統是諸如C:\Users\vlyu\Perforce\這樣的右斜槓,而linux下是諸如/home/vlyu/這樣的左斜槓,一開始自己只在單系統下開發和測試,沒考慮到這個問題,所以當在腳本中需要自行組合path成一個新的path或者需要匹配subPath時,直接用比較笨的方法,類似硬編碼那樣的錯誤,直接把\\dirname或者/dirname這樣的路徑加到新path上面去(類似newPath = path +dirName的寫法),這樣容易導致腳本只在windows/linux上正常跑,而在另一個系統則因爲無法識別這樣格式的path導致出錯。

後來尋求解決辦法,一開始希望用正則表達式來模糊化斜槓解決問題,但是發現這種方法容易出現漏洞,萬一path其他地方就包含這個表達式呢,所以還是得結合整個path也就是要把斜槓考慮進去。後來想起來python裏面有個join函數:

 

import os
os.path.join(os.getcwd(),dirname1,dirname2,...)

 

這個函數就可以脫離斜槓把路徑結合起來組成新路徑了。而不是自己在代碼裏寫死是用/還是\\。示例如下:

windows下:

 

>>> import os
>>> os.getcwd()
'C:\\Program Files (x86)\\python27'
>>> os.path.join(os.getcwd(),"hello")
'C:\\Program Files (x86)\\python27\\hello'
>>> os.path.join(os.getcwd(),"hello","hi")
'C:\\Program Files (x86)\\python27\\hello\\hi'


linux下:

 

>>> import os
>>> os.path.join(os.getcwd(),"infra",'CMake.txt')
'/home/dev/vlyu/infra/CMake.txt'

 

因此,自己得到了一個心得就是,對於這種系統不兼容或者說所謂跨平臺的問題,應該交由編程語言去解決,語言的開發者肯定有解決辦法給你提供,而不應試圖自己去造輪子,寫一大堆代碼去匹配兩種系統的模式兼容。畢竟python或者Java這些語言已經給你屏蔽了系統兼容性,你總能找到自己用得上的模塊去解決不同系統的兼容性問題。所以,今後遇到這類問題,應該首先考慮我可以用語言(例如python)的什麼模塊或者函數去解決這個問題,而不是趕緊就着手自己造輪子去寫繁雜的代碼,畢竟自己寫出來的未必盡善盡美地兼容了。

https://www.cnblogs.com/lvlang/p/10586349.html

發佈了4 篇原創文章 · 獲贊 167 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章