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

fam*_*kin 48 python string string-formatting

如何str.format在Python中截断字符串?它甚至可能吗?

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

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
...
width       ::=  integer
...
Run Code Online (Sandbox Code Playgroud)

但是明确指定它只适用于填充,而不是截断:

>>> '{:5}'.format('aaa')
'aaa  '
>>> '{:5}'.format('aaabbbccc')
'aaabbbccc'
Run Code Online (Sandbox Code Playgroud)

所以它实际上是宽度的最小宽度.

我知道我可以对字符串进行切片,但是我在这里处理的数据是完全动态的,包括格式字符串和进入的args.我不能只是去明确切片.

fal*_*tru 75

.precision改为使用:

>>> '{:5.5}'.format('aaabbbccc')
'aaabb'
Run Code Online (Sandbox Code Playgroud)

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

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

  • 不要忘记给`width`**和**一个`precision`:`{:5.5}`.这保证了输出总是5个字符,这可能是OP想要的. (17认同)
  • 是否也有用于显示截断字符的内置函数?就像数据被截断时的省略号后缀一样? (6认同)
  • 您可以通过强制非字符串使用 `!s` 进行字符串化来使其适用于非字符串:例如 `f'{123456789!s:5.5s}'` `=>` `'12345'` (4认同)
  • 是否可以截断字符串的开头而不是结尾? (2认同)

ale*_*lex 10

您可以仅按精度参数截断:

>>> '{:.1}'.format('aaabbbccc')
'a'
Run Code Online (Sandbox Code Playgroud)

size 参数设置填充尺寸:

>>> '{:3}'.format('ab')
' ab'
Run Code Online (Sandbox Code Playgroud)

亚历克斯