- Window下python讀取數據路徑可以有三種表示方式:
(1)'c:\\a.txt' ——>
轉義的方式。表示這里\\是一個普通\字符,不容易出錯(2)r'c:\a.txt'
——>聲明字符串。表示不需要轉義,因此這里\ 就是一個普通反斜杠字符(推薦)
(3)'c:/a.txt' ——>直接用正斜杠表示路徑。與linux一樣,沒有轉義的誤解(推薦)
- 為什么會出現三種表示呢?
正斜杠,又稱左斜杠,符號是"/";
反斜杠,也稱右斜杠,符號是"\"。
在Unix/Linux中,路徑的分隔采用正斜杠"/",比如"/home/hutaow";
而在Windows中,正反斜杠二者皆可表示路徑,通常看到是路徑分隔采用反斜 杠"\",比如"C:\Windows\System"。
有時我們會看到這樣的路徑寫法,"C:\\Windows\\System",也就是用兩個反斜杠來分隔路徑,這種寫法在網絡應用或編程中經 常看到,事實上,上面這個路徑可以用"C:/Windows/System"來代替,不會出錯。但是如果寫成了"C:\Windows\System", 那就可能會出現各種奇怪的錯誤了。
至於上述問題出現的原因,要從字符串解析這方面來分析。
學過編程的人都應該知道,在C里面,輸出字符串時,如果想輸出一個換行,那就要加上'\n'這個標志,類似的,輸出一個TAB,就加上' \t',也就是說,反斜杠("\")這個符號會把跟在它后面的字符結合起來轉義成其它字符。根據這個原理,如果想輸出雙引號('"'),就需要輸入' \"',這樣才會將包含了雙引號的字符串正確的寫入內存中。那么如果想輸入一個反斜杠呢?很簡單,只要敲'\\'就可以了。
看到這里或許有些人已經看出眉目了,如果"C:\Windows\System"這個路徑字符串交給C編譯器編譯,實際寫入內存的字符串並沒 有包含反斜杠"\",甚至緊跟在反斜杠后面的字母也一起被轉義成了其它的字符,再次調用的話勢必會出問題。
字符串解析不僅僅局限於C編譯器,Java編譯器、一些配置文件的解析、Web服務器等等,都會遇到對字符串進行解析的這個問題,由於傳統的 Windows采用的是單個斜杠的路徑分隔形式,導致在對文件路徑進行解析的時候可能發生不必要的錯誤,所以就出現了用雙反斜杠"\\"分隔路徑的形式。 不管解析引擎是否將反斜杠解析成轉義字符,最終在內存中得到的都是"\",結果也就不會出問題了。