返回介绍

raw字符串抑制转义

发布于 2024-01-29 22:24:17 字数 1522 浏览 0 评论 0 收藏 0

正如我们已经看到的,转义序列用来处理嵌入在字符串中的特殊字节编码是很合适的。尽管这样,有时候,为了引入转义字符而使用适应的反斜杠的处理会带来一些麻烦。其实这相当常见,例如,Python新手有时会像下面这样使用文件名参数去尝试打开一个文件:

他们认为这将会打开一个在C:\new目录下名为text.dat的文件。问题是这里有"\n",它会识别为一个换行字符,并且"\t"会被一个制表符所替代。结果就是,这个调用是尝试打开一个名为C:(换行)ew(制表符)ext.dat的文件,而不是我们所期待的结果。

这正是使用raw字符串所要解决的问题。如果字母r(大写或小写)出现在字符串的第一引号的前面,它将会关闭转义机制。这个结果就是Python会将反斜杠作为常量来保持,就像输入的那样。因此为了避免这种文件名的错误,记得在Windows中增加字母r:

还有一种办法:因为两个反斜杠是一个反斜杠的转义序列,能够通过简单地写两个反斜线去保留反斜杠:

实际上,当打印一个嵌入了反斜杠字符串时,Python自身也会使用这种写两个反斜杠的方法:

当与数字表示相同时,在交互提示打印结果的默认格式和编码一样,并且在输出中有转义的反斜杠。打印语句提供了一种对用户更友好的格式,在每处实际上仅有一个反斜杠。为了验证这种情况,你可以检查内置len函数的结果,这会返回这个字符串的字节数,与其显示的格式没有关系。如果计算了整个路径的输出中的字符数,你会发现每个反斜杠只占一个字符,所以总计15个字符。

除了在Windows下的文件夹路径,raw字符串也在正则表达式(文本模式匹配,通过在第4章介绍过的re模块支持)中常见。注意Python脚本会自动在Windows和UNIX的路径中使用斜杠表示字符串路径,因为Python试图以可移植的方法解释路径(例如,打开文件的时候,'C:/new/text.dat'也有效)。尽管这样,如果你编写的路径使用Windows的反斜杠,raw字符串是很有用处的。

注意:尽管有用,但一个raw字符串也不能以单个的反斜杠结尾,因为,反斜杠会转义后续引用的字符,仍然必须转义外围引号字符以将其嵌入到该字符串中。也就是说,r"...\"不是一个有效的字符串常量,一个raw字符串不能以奇数个反斜杠结束。如果需要用单个的反斜杠结束一个raw字符串,可以使用两个反斜杠并分片掉第二个反斜杠(r'1\nb\tc\\'[:-1])、手动添加一个反斜杠(r'1\nb\tc'+'\\'),或者忽略raw字符串语法并在常规字符串中把反斜杠改为双反斜杠('1\\nb\\tc\\')。以上三种形式都会创建同样的8字符的字符串,其中包含3个反斜杠。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文