2010-08-19 72 views
11
str = r'c:\path\to\folder\' # my comment 

IDE:Eclipse中,python2.6的Python原始文本字符串

當字符串中的最後一個字符是反斜槓,似乎將難逃最後的單引號和對待我的評論作爲字符串的一部分。但原始字符串假設忽略所有轉義字符,對吧?什麼可能是錯的?謝謝。

回答

33

原始字符串字面不要把反斜槓作爲啓動轉義序列除了時立即跟隨字符是引號字符被界定文字,在這種情況下,反斜槓確實逃脫它。

設計動機是,原始字符串文字的存在只是爲了方便進入正則表達式模式 - 即所有,其他設計目標存在於這些文字中。而RE模式永遠不需要以反斜槓結束,但它們可能需要包含各種引用字符,從哪個規則開始。

許多人嘗試使用原始字符串文字來使他們按照習慣的方式(使用反斜槓)輸入Windows路徑 - 但是正如您注意到的,當您需要路徑以反斜槓結尾。通常情況下,最簡單的解決方法是使用向前斜線,微軟的C運行時和所有版本的Python的支持,完全等值路徑:

s = 'c:/path/to/folder/' 

(邊注:陰影內建的名字,像str,帶有你自己的標識符 - 這是一種可怕的做法,沒有任何好處,除非你有一天避免了這種可怕的做法,否則你會發現一個令人討厭的調試問題,當你的某個部分代碼踐踏內置名稱,另一部分需要使用內置名稱的真實含義)。

+3

(甚至一個原始字符串不能在 奇數反斜線結束)+ 1在Python中正確解釋Windows路徑使用'/' – 2013-01-18 00:58:49

+0

稍有不同的用法,但類似的問題:一個b64encode()字符對象如何在最後使用文字反斜槓?如果我嘗試b'somestring \'我得到一個錯誤,如果我b'somestring \\'它編碼兩個反斜槓。 – Jerod 2016-10-14 18:38:25