2014-03-02 74 views
3

我有有類似下面替換\與 python中

>>> path 
'\\\\sdgte\\ssdfdaa\\asfdsf' 

我想用\替換\\文件夾的路徑的字符串。我試圖取代,但不如下

>>> path.replace('\\','\') 
File "<input>", line 1 
path.replace('\\','\') 
        ^
SyntaxError: EOL while scanning string literal 

工作有什麼幫助將高度讚賞。

+0

現在嘗試:>>> len('\\')'在您的系統上。 –

回答

8

字符串中沒有「\\」。如果您打印它而不是查看它的表示,您會看到該字符串實際包含的值。

>>> print path 
\\sdgte\ssdfdaa\asfdsf 
2

您可能不需要更換任何東西。 \是python中的一個特殊字符,意思是字符串文字中的「下一個字符」。也就是說,如果你想有一個字符串,方含反斜槓,你可能鍵入"\\"

>>> len('\\') 
1 
>>> print '\\' 
\ 
>>> print '\\\\foo\\bar' 
\\foo\bar 
>>> 
1

您應該使用逃生charachter「\」逃脫每個\在字符串中

path.replace('\\\\','\\') 
0

你遇到的問題是\是一個轉義字符。取而代之的讀取作爲

與「\」

Python是讀你的參數作爲替代「\\」「替換爲單引號字符單反斜槓字符」。你得到錯誤的原因是因爲python忽略了你的第二個單引號,因爲它認爲這是你想要的。

你想要的是:

path.replace('\\\\', '\\') 

你有逃避所有的反斜線,因爲他們是特殊的。

+0

我嘗試過,但它只是取代第一次出現。 >>> path '\\\\ server path \\ parent folder \\ folder1' >>> path.replace('\\\\','\\') '\\ server path \\ parent folder \\ folder1' – anujkum

2

你得到這個SyntaxError的原因與你看到加倍反斜槓開始的原因是相同的:反斜槓是「轉義」字符,用來表示特殊序列的開始,如「\ n」換行,否則很難在字符串中表示。因此反斜槓字符本身必須用雙反斜槓表示。

在另一方面,如果你不需要在字符串中使用任何轉義序列,可以前言字符串以「R」,而不是反斜槓加倍:

path.replace(R」 \\」,R '\')

path.replace(r'\\', '\\') 

「r」 表示一個 「原始」 的字符串。

+1

'r'\\'=='\\\\''。 'r'\''引發一個SyntaxError。 – falsetru

+0

呵呵。就像你所看到的,在我發佈之前我沒有測試過。 :)我得說,這個結果讓我感到驚訝。任何反斜槓後的字符都可以工作,但我想沒有辦法在原始字符串中包含終端反斜槓。 –

+0

請參閱[爲什麼原始字符串(r字符串)不能以反斜槓結尾?](http://docs.python.org/2/faq/design.html#why-can-t-raw-strings-r -strings端上帶有一個-反斜槓)。 – falsetru