Python 原始字符串是什么?
在 Python 中,我们可以在字符串前面加上一个 “r” 或 “R”,以表示这是一个原始字符串。原始字符串也叫做 “原生字符串”,它不会对字符串进行转义。
语法:
name = r'xxxx'示例 1:不使用 Python 原始字符串
s = 'C:\northwest\northwind'
print(s)运行结果如下。
C:
orthwest
orthwind分析:
在文件操作中,我们经常要获取一个文件的路径。上面的示例本来想输出一个文件的路径,但是却发现运行结果跟预期不一样。这是因为 Python 把 “\n” 看成是一个转义字符了。想要解决这个问题,我们可以在 “\” 前面加上一个 “\”,此时 Python 就会把 “\\” 看成一个转义字符。
s = 'C:\\northwest\\northwind'
print(s)但上面这种方式并不直观,显得比较麻烦。那还有没有更好的解决方法呢?这个时候原始字符串就可以派上用场了。请看下面例子。
示例 2:使用 Python 原始字符串
s = r'C:\northwest\northwind'
print(s)运行结果如下。
C:\northwest\northwind分析:
当一个字符串前面加上 “r” 或 “R” 时,表示这不是一个普通字符串,而是一个原始字符串。所谓 “原始字符串”,就是你看到的字符串是怎样的,最终它就是怎样的,Python 不会对这个字符串进行转义。比如 Python 看到反斜杠,那就是反斜杠,此时 Python 就不会把 “\n” 看成一个转义字符。简单来说,原始字符串可以视为一条声明:“不要处理该字符串中的特殊字符。”
当一个字符串中有很多需要转义的字符时,如果每一个都用反斜杠 “\” 来取消,这是一件很麻烦的事情。在这种情况下,使用原始字符串就会更加方便与直观。
Python 原始字符串的一个 “小陷阱”
虽然原始字符串好用,但有一个非常著名的 “坑”:原始字符串不能以奇数个反斜杠(\)结尾。
示例 3:原始字符串不能以单反斜杠结尾
s = r'C:\northwest\'
print(s)运行结果如下。
(报错)SyntaxError: unterminated string literal (detected at line 1); perhaps you escaped the end quote?分析:
虽然原始字符串原则上不处理转义,但在 Python 的底层词法解析时,末尾的反斜杠依然会 “锁住” 紧跟在它后面的那个单引号,导致 Python 认为这个字符串没有闭合。如果你确实需要表示一个以反斜杠结尾的路径,可以使用普通的字符串转义,或者采用字符串拼接的方式来解决,比如:
s = r'C:\northwest' + '\\'
print(s)此时运行结果如下。
C:\northwest\