如何在字符串字面值中放入实际的反斜杠(而不是用作转义序列)?
我有这段代码:
import os
path = os.getcwd()
final = path +'\xulrunner.exe ' + path + '\application.ini'
print(final)
我想要的输出是这样的:
C:\Users\me\xulrunner.exe C:\Users\me\application.ini
但我得到的错误信息是这样的:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \xXX escape
我不想让反斜杠被当作转义符号处理,而是想让它们作为普通的反斜杠。该怎么做呢?
注意,如果字符串应该仅仅包含一个反斜杠——更一般来说,字符串末尾应该有奇数个反斜杠——那么原始字符串 是无法使用的。请使用 如何得到一个只包含一个反斜杠的字符串? 来解决那些只想要一个反斜杠的字符串的问题。当问题特别是关于想要避免使用转义符时,请使用 如何在python中写字符串字面量而不需要转义它们?。
4 个回答
5
你可以用两个反斜杠(\\
)来表示一个反斜杠,但这样看起来不太美观。为了让代码更好看,可以在字符串前面加一个r
,这样就表示这是一个原始字符串。原始字符串会忽略所有的转义符号,把反斜杠当作普通文本来处理。它不能包含结束引号,除非前面有一个反斜杠(这个反斜杠会被算在字符串里),而且它不能以单个反斜杠(或者奇数个反斜杠)结尾。
35
你可以用反斜杠来转义斜杠。也就是说,输入\\
就能得到一个斜杠。
53
直接回答你的问题,就是在字符串前面加上r
。
final= path + r'\xulrunner.exe ' + path + r'\application.ini'
不过,更好的方法是使用os.path.join
:
final = os.path.join(path, 'xulrunner.exe') + ' ' + \
os.path.join(path, 'application.ini')
(这里的反斜杠是用来转义换行符的,但如果你想的话,可以把整个内容放在一行上)
我想提一下,你可以在文件路径中使用正斜杠,Python会自动把它们转换成正确的分隔符(在Windows上是反斜杠),所以
final = path + '/xulrunner.exe ' + path + '/application.ini'
应该可以正常工作。不过,使用os.path.join
更好,因为这样可以清楚地表达你想要做的事情。