Python字符串格式 - 限制字符串长度,但修剪字符串开头

Łuk*_*ski 9 python string logging truncate

我正在使用带有自定义格式化程序的Python标准日志记录模块,其中我限制了某些字段的长度.它使用标准的%Python运算符.

我可以像这样对百分比格式的字符串应用限制(这会将长度限制为10个字符):

>>> "%.10s" % "Lorem Ipsum"
'Lorem Ipsu'
Run Code Online (Sandbox Code Playgroud)

是否可以从头开始修剪它,所以输出是'orem Ipsum'(没有操纵右侧参数)?

Abh*_*jit 7

这可以通过切片轻松完成,因此您不需要任何字符串格式操作来执行您的JOB

>>> "Lorem Ipsum"[-10:]
'orem Ipsum'
Run Code Online (Sandbox Code Playgroud)

  • "(没有操纵右侧的论点)" (2认同)

Aar*_*all 7

是否可以从%格式开始修剪它?

Python的%格式来自C的printf.

请注意,.表示浮动的精度.它在字符串上工作仅仅是副作用,遗憾的是,字符串格式规范中没有规定将字符串从左侧剥离到固定的最大宽度.

因此,如果必须从最后将字符串剥离到固定宽度,我建议从负索引切片.此操作非常强大,如果字符串小于10个字符,则不会失败.

>>> up_to_last_10_slice = slice(-10, None)
>>> 'Lorem Ipsum'[up_to_last_10_slice]
'orem Ipsum'
>>> 'Ipsum'[up_to_last_10_slice]
'Ipsum'
Run Code Online (Sandbox Code Playgroud)

str.format 也没有帮助

str.format 这里没有帮助,宽度是最小宽度:

>>> '{lorem:>10}'.format(lorem='Lorem Ipsum')
'Lorem Ipsum'
>>> '{lorem:*>10}'.format(lorem='Lorem')
'*****Lorem'
Run Code Online (Sandbox Code Playgroud)

(星号" *"是填充字符.)

  • 答对了。字符串格式的“精确”截断(“%”和“.format()”本质上是从右侧删除的。因此,除非您在提交格式化之前使用字符串截断、反转或其他替代方法,否则似乎是不可能的。 (2认同)