我使用带有自定义格式化程序的Python标准日志记录模块,其中我限制了某些字段的长度。它使用标准的%
Python运算符。
我可以对这样的百分比格式字符串应用限制(这会将长度限制为10个字符):
>>> "%.10s" % "Lorem Ipsum"
'Lorem Ipsu'
是否可以从头开始修剪它,因此输出为'orem Ipsum'
(不操纵右侧参数)?
答案 0 :(得分:6)
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'
(星号," *
",是填充字符。)
答案 1 :(得分:5)
这可以通过切片轻松完成,因此您不需要任何字符串格式操作来完成您的JOB
>>> "Lorem Ipsum"[-10:]
'orem Ipsum'
答案 2 :(得分:1)
我有相同的问题,并使用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中,但是我也想保留原始名称。