如何在Python中使用str.format截断字符串?

73

如何在Python中使用str.format截取字符串?这是否可能?

格式规范迷你语言中提到了一个width参数:

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
...
width       ::=  integer
...

但是显然只有对填充进行指定才有效,而不是截断:

>>> '{:5}'.format('aaa')
'aaa  '
>>> '{:5}'.format('aaabbbccc')
'aaabbbccc'

所以它更像是最小宽度而不是实际宽度。

我知道我可以切割字符串,但我在这里处理的数据完全是动态的,包括格式字符串和传入的参数。我不能只去明确地切割一个。

2个回答

112
使用.precision代替:
>>> '{:5.5}'.format('aaabbbccc')
'aaabb'

根据格式规范微语言的文档:

精度是一个十进制数,用于指定使用 'f''F' 格式化浮点数时小数点后应显示的位数,或使用 'g''G' 格式化浮点数时小数点前后应显示的位数。对于非数字类型,该字段指示最大字段大小-换句话说,将从字段内容中使用多少个字符。对于整数值,不允许使用 精度


6
有没有内置的方法可以显示一个截断字符呢?比如,当数据被截断时,可以显示省略号后缀? - ThorSummoner
20
不要忘记给出“宽度”和“精度”:{:5.5}。这将确保输出始终为5个字符,这很可能是 OP 想要的。 - Harvey
1
@falsetru:您是否愿意将Harvey的建议添加到您的答案中? - Neal Gokli
4
可以将字符串的开头截取掉吗?而不是结尾。 - Hendrik Wiese
4
您可以通过使用 !s 强制将非字符串对象转换为字符串来使其适用于非字符串,例如 f'{123456789!s:5.5s}' => '12345'。请注意,此操作并不会改变原始对象的类型,只是在格式化字符串时将其转换为字符串。 - Shabble
显示剩余6条评论

9

您可以仅通过精度参数截断:

>>> '{:.1}'.format('aaabbbccc')
'a'

size参数用于设置填充后的大小:

>>> '{:3}'.format('ab')
' ab'

亚历克斯


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接