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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python字符串格式 - 限制字符串长度,但修剪字符串开头相关的知识,希望对你有一定的参考价值。

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

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

>>> "%.10s" % "Lorem Ipsum"
'Lorem Ipsu'

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

答案

Is it possible to trim it from the beginning with % formatting?

Python's % formatting comes from C's printf

请注意,.表示浮点数的精度。它在字符串上工作仅仅是副作用,不幸的是,there is no provision in the string formatting specification to accommodate stripping a string from the left到固定的最大宽度。

因此,如果必须从最后将字符串剥离到固定宽度,我建议从负索引切片。此操作非常强大,如果字符串小于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'

str.format也没有帮助

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

>>> '{lorem:>10}'.format(lorem='Lorem Ipsum')
'Lorem Ipsum'
>>> '{lorem:*>10}'.format(lorem='Lorem')
'*****Lorem'

(星号,“*”,是填充字符。)

另一答案

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

>>> "Lorem Ipsum"[-10:]
'orem Ipsum'
另一答案

我有同样的问题,并使用LogRecordFactory提出了这个解决方案。

orig_factory = logging.getLogRecordFactory()

def record_factory(*args, **kwargs):
    record = orig_factory(*args, **kwargs)
    record.sname = record.name[-10:] if len(
        record.name) > 10 else record.name
    return record

logging.setLogRecordFactory(record_factory)

在这里,我将名称截断为10个字符并将其存储在属性sname中,该属性可以用作任何其他值。

%(sname)10s

可以将截断的名称存储在record.name中,但我也希望保留原始名称。

以上是关于Python字符串格式 - 限制字符串长度,但修剪字符串开头的主要内容,如果未能解决你的问题,请参考以下文章

实体框架4.0在插入之前自动截断/修剪字符串

PHP 将字符串修剪为特定长度并插入椭圆

java.sql.ResultSet 在增加列长度后返回修剪后的字符串

如何在标准F77中修剪字符数组?

TypeError:在字符串格式化python期间并非所有参数都转换了

Python:固定长度字符串左/右对齐多个变量