gpt4 book ai didi

python - 在三引号 fstring 中保留缩进

转载 作者:行者123 更新时间:2023-12-03 19:26:02 24 4
gpt4 key购买 nike

我正在尝试在 Python3(.7) 中使用三引号字符串来构建一些格式化的字符串。

我有一个内部字符串列表,所有这些字符串都需要使用标签:

    This is some text
across multiple
lines.

和一个应该包含内部字符串的字符串
data{
// string goes here
}

创建内部字符串时无法使用 Tab 选项卡。所以,我的想法是使用 dedent使用 Python3 三引号 fstrings:
import textwrap

inner_str = textwrap.dedent(
'''\
This is some text
across multiple
lines.'''
)

full_str = textwrap.dedent(
f'''\
data{{
// This should all be tabbed
{inner_str}
}}'''
)

print(full_str)

但是,不保留缩进:
    data{
// This should all be tabbed
This is some text
across multiple
lines.
}

想要的结果:
data{
// This should all be tabbed
This is some text
across multiple
lines.
}

如何在不预先标记内部字符串的情况下保留 fstring 的缩进?

最佳答案

这似乎提供了你想要的。

import textwrap

inner_str = textwrap.dedent(
'''\
This is some text
across multiple
lines.'''
)

full_str = textwrap.dedent(
f'''
data{{
{textwrap.indent(inner_str, " ")}
}}'''
)

更好的解决方案:
idt = str.maketrans({'\n': "\n        "})
print(textwrap.dedent(
f'''
data{{
{inner_str.translate(idt)}
}}'''
))

另一种具有自定义标签宽度的解决方案:
def indent_inner(inner_str, indent):
return inner_str.replace('\n', '\n' + indent) # os.linesep could be used if the function is needed across different OSs

print(textwrap.dedent(
f'''
data{{
{indent_inner(inner_str, " ")}
}}'''
))

关于python - 在三引号 fstring 中保留缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57174866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com