2008-11-19 62 views
42

我有一個包含兩個雙引號和反斜線,我要設置爲在Python變量的字符串。但是,每當我嘗試設置它時,引號或斜槓都將被刪除或轉義。這裏有一個例子:在Python字符串字面引用反斜線

>>> foo = 'baz "\"' 
>>> foo 
'baz ""' 

所以不是baz "\"像我想我得到baz ""。如果我當時試圖逃離反斜槓,它並沒有幫助:

>>> foo = 'baz "\\"' 
>>> foo 
'baz "\\"' 

現在匹配什麼我把,但沒有什麼,我本來想。你如何解決這個問題?

回答

61

你被誤導輸出 - 你實際上走的是第二種方法你想要做什麼,你就是不相信。 :)

>>> foo = 'baz "\\"' 
>>> foo 
'baz "\\"' 
>>> print foo 
baz "\" 

順便說一句,有可能是一個有點清晰另一個字符串形式:

>>> print r'baz "\"' 
baz "\" 
20

使用原始字符串:

>>> foo = r'baz "\"' 
>>> foo 
'baz "\\"' 

注意的是,雖然它看起來錯誤,它實際上對。字符串foo中只有一個反斜槓。

發生這種情況是因爲在提示符下輸入foo時,python會在字符串上顯示__repr__()的結果。這導致以下(注意只有一個反斜槓和周圍的print編輯字符串不包括引號):

>>> foo = r'baz "\"' 
>>> foo 
'baz "\\"' 
>>> print foo 
baz "\" 

而且,我們繼續向前,因爲有更多的反斜槓技巧。如果你想擁有在字符串的結尾反斜槓,用上面的方法,你會遇到一個問題:當你這樣做

>>> foo = r'baz \' 
    File "<stdin>", line 1 
    foo = r'baz \' 
       ^ 
SyntaxError: EOL while scanning single-quoted string 

原始字符串不能正常工作。你必須使用一個普通字符串和逃避你的反斜線:

>>> foo = 'baz \\' 
>>> print foo 
baz \ 

但是,如果你正在使用Windows文件名的工作,你在一些痛苦。你想要做的是使用正斜槓和os.path.normpath()功能:

myfile = os.path.normpath('c:/folder/subfolder/file.txt') 
open(myfile) 

這將節省大量逃逸,頭髮撕裂。 This page通過這個會前一陣子,當是得心應手。

+1

如果打印查爾斯達菲上面那樣,它會正確顯示。當你只做「foo」時,Python正在使用__repr __()函數來顯示字符串。它的輸出帶有一個額外的反斜槓,因此當你將結果賦值給一個變量時,其內容將是相同的。 – 2008-11-19 05:31:42

3

什麼哈雷表示,除了最後一點 - 它實際上並不是必需的「/」 s到變成叫開之前「\」 s。 Windows非常樂意接受帶有正斜槓的路徑。

infile = open('c:/folder/subfolder/file.txt') 

你可能需要normpathed字符串的唯一情況是,如果您是通過外殼(使用os.systemsubprocess模塊)傳遞到另一個程序。

-2

用反斜槓結尾字符串的另一種方法是用反斜槓後跟空格結束字符串,然後調用字符串上的.strip()函數。

我試圖連接兩個字符串變量,讓他們用反斜槓分開,所以我用了以下內容:

newString = string1 + "\ ".strip() + string2 
相關問題