我有一个包含双引号和反斜杠的字符串,我想在Python中将其设置为变量。但是,每当我尝试设置它时,引号或斜杠都会被删除或转义。下面是一个示例:
>>> foo = 'baz "\"'
>>> foo
'baz ""'
所以,我想要的是 baz "\"
,但实际得到的是baz ""
。如果我尝试转义反斜杠,也没有帮助:
>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'
现在它匹配了我输入的内容,但这并不是我最初想要的。你如何解决这个问题?
我有一个包含双引号和反斜杠的字符串,我想在Python中将其设置为变量。但是,每当我尝试设置它时,引号或斜杠都会被删除或转义。下面是一个示例:
>>> foo = 'baz "\"'
>>> foo
'baz ""'
所以,我想要的是 baz "\"
,但实际得到的是baz ""
。如果我尝试转义反斜杠,也没有帮助:
>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'
现在它匹配了我输入的内容,但这并不是我最初想要的。你如何解决这个问题?
你被输出结果误导了 -- 你采用的第二种方法实际上已经达到了你想要的效果,只是你不相信罢了。 :)
>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'
>>> print(foo)
baz "\"
顺便说一下,还有另一种字符串形式可能会更加清晰:
>>> print(r'baz "\"')
baz "\"
foo = '\\'
输出为'\\'
(包括转义字符)是否存在某种错误?因为当您转义其他字符时,例如foo ='\"'
会产生'"'
(不带转义字符)的输出。 - Jaime Hablutzel'"'
和'\"'
一样都是描述只有一个"
字符的字符串的有效方式。相比之下,'\'
不是描述单个反斜杠字符的有效方式(因为孤立的斜杠看起来像是转义了后面的'
),所以在非原始字符串中,必须对孤立的反斜杠进行转义。 - Charles Duffy使用原始字符串:
>>> foo = r'baz "\"'
>>> foo
'baz "\\"'
foo
中仅有一个反斜杠。foo
时,Python会显示字符串上__repr__()
的结果。这将导致以下结果(请注意,打印的字符串只有一个反斜杠且没有引号):>>> 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)
infile = open('c:/folder/subfolder/file.txt')
只有当您通过shell(使用os.system
或subprocess
模块)将其传递给另一个程序时,您才可能需要规范化字符串。
如果您需要文件路径,请使用"\\"
import os
path = r"c:\file"+"\\"+"path"
os.path.normpath(path)
这将输出c:\file\path
以反斜杠结尾字符串的另一种方法是在字符串末尾加上反斜杠和一个空格,然后调用 .strip()
函数。
我试图将两个字符串变量连接起来,并用反斜杠将它们分隔开,所以我使用了以下代码:
newString = string1 + "\ ".strip() + string2
"\ "
不是一个有效的转义序列,所以反斜杠保留在字符串中。尝试使用 "\n".strip("n")
并查看差异。如果 Python 的下一个版本将反斜杠空格定义为有效的单个字符,则此代码将无法正常工作。 - Mark Ransomr"\ ".strip()
或者 r"\ "[:-1]
。 - alexia