我有一个包含双引号和反斜杠的字符串,我想在Python中设置一个变量.但是,每当我尝试设置它时,引号或斜杠都会被删除或转义.这是一个例子:
>>> foo = 'baz "\"' >>> foo 'baz ""'
所以,而不是baz "\"
像我想要的那样baz ""
.如果我然后试图逃避反斜杠,它也没有帮助:
>>> foo = 'baz "\\"' >>> foo 'baz "\\"'
现在哪个符合我的要求但不是我原本想要的.你是如何解决这个问题的?
你被输出误导了 - 你正在采取的第二种方法实际上做了你想要的,你只是不相信它.:)
>>> foo = 'baz "\\"' >>> foo 'baz "\\"' >>> print foo baz "\"
顺便说一下,还有另一种字符串形式可能更清楚一点:
>>> print r'baz "\"' baz "\"
使用原始字符串:
>>> foo = r'baz "\"' >>> foo 'baz "\\"'
请注意,虽然它看起来不对,但它确实是正确的.字符串中只有一个反斜杠foo
.
发生这种情况是因为当您只是foo
在提示符处键入时,python会__repr__()
在字符串上显示结果.这导致以下内容(注意只有一个反斜杠,并且print
ed字符串周围没有引号):
>>> foo = r'baz "\"' >>> foo 'baz "\\"' >>> print foo baz "\"
让我们继续前进,因为有更多的反斜杠技巧.如果你想在字符串的末尾加一个反斜杠并使用上面的方法,你会遇到一个问题:
>>> foo = r'baz \' File "", 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)
这将节省大量的逃避和头发撕裂. 这个页面在前一段时间内很方便.