[英]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.