簡體   English   中英

Python str.format字符串以固定間距開始

[英]Python str.format string start at a fixed spacing

我想輸出以下格式:

addr<-9->bit<-15->value<-13->name<-26->type
....     ...      ......     ......    ......   #..... is the content of each row

我使用str.format來實現它:

STRING_FORMATTER = '{0:13}{1:18}{2:18}{3:30}{4:10}\n'
content = STRING_FORMATTER.format('addr', 'bit', 'value', 'name', 'type')
content = content + STRING_FORMATTER.format('0123', 'LONG STRING THAT EXCEEDS 18 SPACES!!!!!!!!!!!!!!!!', '', '', 'reg')
content = content + STRING_FORMATTER.format('00', '0', '0xAD', 'NAME', 'bit')
.....

我基本上是按類型構造字符串。 上面的問題是,當第二個字符串超過18個字符空間時,后面的字符串將被推送。 有辦法解決嗎?

還是有更好的方法來格式化字符串,使其以前面的固定間距開始?

您可以構造一個函數來截斷太長的字符串,並將其包裝在格式輸入中。

def truncate(*inputs, max_length=18):
    return tuple(s[:max_length] for s in inputs)

STRING_FORMATTER = '{0:13}{1:18}{2:18}{3:30}{4:10}\n'
content = STRING_FORMATTER.format(
    *truncate('addr', 'bit', 'value', 'name', 'type'))
content = content + STRING_FORMATTER.format(
    *truncate('0123', 'LONG STRING THAT EXCEEDS 18 SPACES!!!!!!!!!!!!!!!!', '', '', 'reg'))
content = content + STRING_FORMATTER.format(
    *truncate('00', '0', '0xAD', 'NAME', 'bit'))

要執行所需的操作,需要將字符串拆分為三個字段。 以下使用的語法要求PEP 448使用Python 3.5或更高版本-使用的其他拆包概述功能。 該函數將字符串拆分為要跨越的三個字段的正確字段寬度:

STRING_FORMATTER = '{0:13}{1:18}{2:18}{3:30}{4:10}\n'

def split(s,*widths):
    current = 0
    for width in widths:
        yield s[current:current + width]
        current += width

content = STRING_FORMATTER.format('addr', 'bit', 'value', 'name', 'type')
content += STRING_FORMATTER.format('0123', *split('LONG STRING THAT EXCEEDS 18 SPACES!!!!!!!!!!!!!!!!',18,18,30), 'reg')
content += STRING_FORMATTER.format('00', '0', '0xAD', 'NAME', 'bit')
print(content)

輸出:

addr         bit               value             name                          type
0123         LONG STRING THAT EXCEEDS 18 SPACES!!!!!!!!!!!!!!!!                reg
00           0                 0xAD              NAME                          bit

暫無
暫無

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

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