如何使用 Python 格式化带有三重引号的多行字符串?

新手上路,请多包涵

我在网上找不到这个,但基本上我有一个这样的字符串:

 s = "name={0},
address={1},
nickname={2},
age={3},
comments=
"""
{4}
"""
"

我需要像这样使用变量来格式化这个字符串:

 s.format("alice", "N/A", "alice", 18, "missing person")

我不能在那里更改三重引号,因为将使用我的字符串的程序期望这样做,否则将无法工作。

我怎样才能正确声明/转义这个字符串?

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

阅读 876
2 个回答

您可以为字符串使用三重单引号:

 s = '''name={0},
address={1},
nickname={2},
age={3},
comments=
"""
{4}
"""
'''

print s.format("alice", "N/A", "alice", 18, "missing person")

输出:

 name=alice,
address=N/A,
nickname=alice,
age=18,
comments=
"""
missing person
"""

原文由 niemmi 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 \ 转义字符串中的三引号,就像转义任何其他引号字符一样:

 s = """name={0},
address={1},
nickname={2},
age={3},
comments=
\"\"\"
{4}
\"\"\"
"""

严格来说,你只需要转义 一个 " 字符 --- 足以防止三重 """ 出现 --- 但我发现转义所有三个使我的意图更清楚.

之后…

 sf = s.format("alice", "N/A", "alice", 18, "missing person")
print(sf)
print('----')
print(repr(sf))

…产生:

 name=alice,
address=N/A,
nickname=alice,
age=18,
comments=
"""
missing person
"""

----
'name=alice,\naddress=N/A,\nnickname=alice,\nage=18,\ncomments=\n"""\nmissing person\n"""\n'

niemmi 的答案 有效,但前提是您没有在字符串中混合使用 '''""" 三重引号。用反斜杠转义引号字符 总是 有效的。

烦恼 #1:尾随换行符

我打印了一行破折号以突出显示 s 保留了最后三个转义引号字符和实际结束字符串的三重引号之间的换行符。要从文字中删除它:

 s = """[as before...]
\"\"\"
{4}
\"\"\""""

烦恼 #2:在文字中保留缩进

s 文字的第二行和后续行必须与第一(左侧)列齐平。三引号字符串整齐地排列在缩进块内:

 def indents_appear_in_string_literal():
    # This looks good but doesn't work right.
    s = """name={0},
    address={1},
    nickname={2},
    age={3},
    comments=
    \"\"\"
    {4}
    \"\"\"
    """
    sf = s.format("alice", "N/A", "alice", 18, "missing person")
    print(sf)
    print('----')
    print(repr(sf))
    return

…将保留文字内的缩进:

 name=alice,
    address=N/A,
    nickname=alice,
    age=18,
    comments=
    """
    missing person
    """

----
'name=alice,\n    address=N/A,\n    nickname=alice,\n    age=18,\n    comments=\n    """\n    missing person\n    """\n    '

原文由 Kevin J. Chase 发布,翻译遵循 CC BY-SA 3.0 许可协议

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