2014-03-02 40 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