python原始字符串末尾的反斜杠

标签:
字符串转义字符itpython |
分类: Python |
在Python中,可以直接对变量进行赋值,如果是个字符串就用双引号或者单引号括起来。现在遇到下面的问题,我对变量str进行赋值,给予了一个路径,发现用print打印的时候,出现了换行的现象。原来是Python把\n当做了一个回车。如下:
http://s13/mw690/004geTNOzy6QLD8Isbi2c&690
使用原始字符串。在字符串之前,在引号之前,加了一个小r,成功的解决了问题。但是,在我想输入r'c:\now\yao\yuan\'的时候,又遇到了错误:
使用原始字符串。在字符串之前,在引号之前,加了一个小r,成功的解决了问题。但是,在我想输入r'c:\now\yao\yuan\'的时候,又遇到了错误:
经过查阅多方资料,终于发现了问题所在:
字符串的末尾,即使是原始(raw)字符串末尾也不能带奇数个反斜杠,因为这会引起后续引号的转义!
比如r'C:\Windows\'这个字符串常量,后一个反斜杠会告诉解析器后面的单引号不是字符串的结尾,字符串由两个引号包围,少了一个引号结束字符串,所以出现"SyntaxError:
EOL while scanning single-quoted string
"这个错误;这说明原始字符串也不是100%的"raw",它影响字符串的开头和结尾,下面举几个例子:
r'C:\Windows'new'不是有效的字符串,前部分r'C:\Windows'已经是合法的字符串了,后面加上new'解析失败;
r'C:\Windows'\new'也会出错,错误原因同上,合法字符串r'C:\Windows'加上\new'让解析器解析失败;
r'C:\Windows\'new'不会出错,很多人理解的原始字符串会保留字符本来的意义,所以会认为字符串中 r'C:\Windows\'已经是一个合法的字符串了,后面还跟着new'使得字符串不合法,其实这个字符串中 r'C:\Windows\'不合法,应为后面的反斜杠告诉解析器"我后面的引号的意义已经被我转义了,在这里不是字符串的结尾,你可以继续进行解析"。
r'C:\Windows'new'不是有效的字符串,前部分r'C:\Windows'已经是合法的字符串了,后面加上new'解析失败;
r'C:\Windows'\new'也会出错,错误原因同上,合法字符串r'C:\Windows'加上\new'让解析器解析失败;
r'C:\Windows\'new'不会出错,很多人理解的原始字符串会保留字符本来的意义,所以会认为字符串中 r'C:\Windows\'已经是一个合法的字符串了,后面还跟着new'使得字符串不合法,其实这个字符串中 r'C:\Windows\'不合法,应为后面的反斜杠告诉解析器"我后面的引号的意义已经被我转义了,在这里不是字符串的结尾,你可以继续进行解析"。
下面提供3个解决办法:
(1)
这个方法是是使用了string[:-n],string是一个字符串,[]中的+-来控制方向,-是从右向左,+是从左向右。n就是一个数字,[:-1]也就是表示打印从第一个到倒是第一个字符,其中倒数第一个字符不打印!
看上面那个例子,如果没有[:-1]来控制的话,用print会打印出来两个\!
(2)
我个人觉得这个方法是最好的,把两个字符串合并,很容易看懂。
(3)
这个方法就比较笨了,在每一个\前,都加了一个转义字符。如果路径很长的话,非常得不适用!
参考:http://www.iteye.com/problems/64471