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

新手上路,请多包涵

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

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

所以我得到的不是 baz "\" 而是 baz "" 。如果我然后尝试转义反斜杠,它也无济于事:

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

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

原文由 Chris Bunch 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 296
2 个回答

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

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

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

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

原文由 Charles Duffy 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用原始字符串:

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

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

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

 >>> 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 Holcombe 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题