如何在字符串文字中放置实际的反斜杠(不将其用于转义序列)?

问题描述 投票:0回答:4

我有这个代码:

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 中编写字符串文字而无需转义它们?

python string escaping backslash rawstring
4个回答
54
投票

要直接回答您的问题,请将

r
放在字符串前面。

final= path + r'\xulrunner.exe ' + path + r'\application.ini'

更多关于 Python 网站的信息

字符串和字节文字都可以选择以字母“r”或“R”为前缀;此类字符串称为原始字符串,并将 反斜杠视为文字字符

但是更好的解决方案是

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
,因为这样可以清楚地表明你想要做什么。


35
投票

你可以逃避斜线。使用

\\
就可以得到一条斜线。


5
投票

您可以用另一个反斜杠(

\\
)来转义反斜杠,但它看起来不会更好。要解决这个问题,请在字符串前面放置一个
r
来表示 原始字符串。原始字符串将忽略all转义序列,将反斜杠视为文字文本。它不能包含结束引号,除非它前面有反斜杠(它将包含在字符串中),并且它不能以单个反斜杠(或奇数个反斜杠)结尾


0
投票

另一种简单(并且可以说更易读)的方法是使用字符串原始格式和替换,如下所示:

import os
path = os.getcwd()
final = r"{0}\xulrunner.exe {0}\application.ini".format(path)
print(final)

或使用 os 路径方法(以及用于提高可读性的微函数):

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)
© www.soinside.com 2019 - 2024. All rights reserved.