如何在字符串字面量中插入实际的反斜杠(而不是用它作为转义序列)?

43

我有这段代码:

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中编写字符串字面值而不必转义它们?

如果您正在Windows上尝试创建一个包含文件路径的字符串,请参阅Python中的Windows路径 - Karl Knechtel
这里有一个相当不错的转义序列概述链接,尽管该问题实际上并不是很好 - OP所描述的根本问题实际上与转义序列无关。 - Karl Knechtel
4个回答

51

简单回答你的问题,将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,因为这样可以清晰地表达您想要做什么。


1
Python不会将/转换为\,在Windows上,/是有效的路径分隔符。 - David Heffernan
请注意,Windows通常也可以使用正斜杠而不是反斜杠;Python不需要将它们转换。 - MilkyWay90

34

您可以转义斜线。使用\\,您将获得一个反斜线。


5

0
另一种简单(也可以说更易读)的方法是使用字符串原始格式和替换,如下所示:
import os
path = os.getcwd()
final = r"{0}\xulrunner.exe {0}\application.ini".format(path)
print(final)

或者使用操作系统路径方法(以及一个微小的函数以提高可读性):

import os

def add_cwd(path):
    return os.path.join( os.getcwd(), path )

xulrunner = add_cwd("xulrunner.exe")
inifile = add_cwd("application.ini")
# in production you would use xulrunner+" "+inifile
# but the purpose of this example is to show a version where you could use any character
# including backslash
final = r"{} {}".format( xulrunner, inifile )
print(final)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接