在 Python 字符串文字中引用反斜杠

我有一个包含双引号和反斜杠的字符串,我想在 Python 中将其设置为一个变量。但是,每当我尝试设置它时,引号或斜杠要么被删除,要么被转义。这里有一个例子:

>>> foo = 'baz "\"'
>>> foo
'baz ""'

所以不是我想要的 baz "\"而是 baz ""。如果我试图避开反斜杠,它也没有帮助:

>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'

现在它与我输入的内容相匹配,但不是我最初想要的内容。你如何解决这个问题?

245937 次浏览

你正在被输出误导——你所采取的第二种方法实际上是你想要的,只是你不相信它。:)

>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'
>>> print(foo)
baz "\"

顺便说一句,还有另一种字符串形式可能更清楚一些:

>>> print(r'baz "\"')
baz "\"

使用原始字符串:

>>> foo = r'baz "\"'
>>> foo
'baz "\\"'

注意,虽然它看起来不对,但实际上是对的。字符串 foo中只有一个反斜杠。

这是因为当您在提示符下键入 foo时,python 会在字符串上显示 __repr__()的结果。这将导致以下结果(注意只有一个反斜杠,在 printed 字符串周围没有引号) :

>>> foo = r'baz "\"'
>>> foo
'baz "\\"'
>>> print(foo)
baz "\"

让我们继续,因为还有更多的反斜杠技巧。如果你想在字符串末尾使用反斜杠并使用上面的方法,你会遇到一个问题:

>>> foo = r'baz \'
File "<stdin>", line 1
foo = r'baz \'
^
SyntaxError: EOL while scanning single-quoted string

当您这样做时,原始字符串不能正常工作。必须使用常规字符串并转义反斜杠:

>>> foo = 'baz \\'
>>> print(foo)
baz \

但是,如果您使用的是 Windows 文件名,那么您将遇到一些麻烦。你要做的就是使用正斜杠和 os.path.normpath()函数:

myfile = os.path.normpath('c:/folder/subfolder/file.txt')
open(myfile)

这将节省很多逃逸和头发撕裂。 这一页时,通过这个方便了一段时间前。

Harley 所说的,除了最后一点-在调用 open 之前实际上没有必要改变“/’s into”。Windows 非常乐意接受带正斜杠的路径。

infile = open('c:/folder/subfolder/file.txt')

只有在通过 shell (使用 os.systemsubprocess模块)传递到另一个程序时,才可能需要对字符串进行规范化。

使用反斜杠结束字符串的另一种方法是使用反斜杠后跟空格结束字符串,然后调用字符串上的 .strip()函数。

我试图连接两个字符串变量,并用反斜杠将它们分开,所以我使用了以下方法:

newString = string1 + "\ ".strip() + string2

如果你在这里为一个文件路径只是使用 "\\"

import os
path = r"c:\file"+"\\"+"path"
os.path.normpath(path)

输出 c:\file\path