簡體   English   中英

如何在Python中格式化具有固定寬度的文本塊?

[英]How to format a block of text with fixed width in Python?

我正在嘗試生成一個看起來像這樣的字符串:

Nadya's Cell:  (415) 123-4567
Jim's Cell:    (617) 123-4567

名稱和電話號碼各不相同,需要內插,並且電話號碼應對齊。 對於此示例,我使用了以下模板:

name1 = "Nadya"
name2 = "Jim"

phone_number1 = "(415) 123-4567"
phone_number2 = "(617) 123-4567"

string = "{name1}'s Cell:  {phone_number1}\n{name2}'s Cell:    {phone_number2}".format(**locals())

我不希望手動添加空格,而是希望字符串的總寬度適應name1name2最長的一個。

到目前為止,我所能想到的是以下https://docs.python.org/3.6/library/string.html

max_length = max(len(name1), len(name2))

# This should use max_length and contain "'s Cell:"
string = "{name1:<7}{phone_number1}\n{name2:<7}{phone_number2}".format(**locals())
print(string)

產生

Nadya  (415) 123-4567
Jim    (617) 123-4567

問題在於總寬度7仍被硬編碼到模板中,並且在名稱后我看不到如何添加's Cell: ,因為這會在名稱和撇號之間產生空格。 任何想法如何解決這個問題?

您可以使用嵌套格式說明符,這是一個經常被忽略的功能:

max_length = max(len(name1), len(name2)) + 2

string = """{name1:<{max_length}}{phone_number1}
{name2:<{max_length}}{phone_number2}""".format(**locals())

print(string)
# output:
# Nadya  (415) 123-4567
# Jim    (617) 123-4567

文檔僅順便提及了它們,這可能解釋了為什么它們相對未知的原因:

format_spec字段也可以在其中包含嵌套的替換字段。 這些嵌套的替換字段可能包含字段名稱,轉換標志和格式說明,但不允許更深層的嵌套。 在解釋format_spec字符串之前,將替換format_spec中的替換字段。 這允許動態指定值的格式。

這是繼https://www.python.org/dev/peps/pep-0498/#format-specifiers之后的另一種使用f字符串的解決方案:

name1 += "'s Cell:"
name2 += "'s Cell:"
max_length = max(len(name1), len(name2))

string = f"{name1:{max_length+2}}{phone_number1}\n{name2:{max_length+2}}{phone_number2}"
print(string)

產生

Nadya's Cell:  (415) 123-4567
Jim's Cell:    (617) 123-4567

按要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM