在Python字符串字面量中引用反斜杠
我有一个字符串,这个字符串里面包含了双引号和反斜杠,我想把它赋值给一个变量在Python里。但是每次我尝试赋值的时候,这些引号或者斜杠要么被删掉了,要么被转义了。举个例子:
>>> foo = 'baz "\"'
>>> foo
'baz ""'
所以我想要的是 baz "\"
,但我得到的是 baz ""
。如果我再尝试转义反斜杠,这也没有用:
>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'
这样虽然和我输入的匹配了,但这并不是我最开始想要的。那我该怎么解决这个问题呢?
5 个回答
5
哈雷说的都对,除了最后一点——其实在调用打开文件之前,不需要把'/'改成'\'。Windows系统可以接受带有正斜杠的路径。
infile = open('c:/folder/subfolder/file.txt')
你只有在通过命令行把路径传给另一个程序时(比如用os.system
或者subprocess
模块),才可能需要用到字符串normpathed。
53
使用原始字符串:
>>> 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)
这样可以省去很多转义的麻烦,避免让人抓狂。这篇文章 在我之前遇到这个问题时很有帮助。
114
你被输出结果给误导了——你采取的第二种方法其实是能达到你想要的效果,只是你不相信而已。 :)
>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'
>>> print(foo)
baz "\"
顺便提一下,还有另一种字符串形式,可能会更清晰一些:
>>> print(r'baz "\"')
baz "\"