[英]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())
我不希望手動添加空格,而是希望字符串的總寬度適應name1
和name2
最長的一個。
到目前為止,我所能想到的是以下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.