我想这样做:
'{pathname:>90}'.format(pathname='abcde')[-2:]
使用字符串格式而不是数组索引。 结果就是'de' 或者在pathname ='e'的情况下,结果将是'e',在e之前有一个空格。如果索引为[2:],则How to truncate a string using str.format in Python?
将回答此问题我在以下示例中需要这个:
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.INFO,style='{',format='{pathname:>90}{lineno:4d}{msg}')
logging.info('k')
答案 0 :(得分:3)
精确技巧(使用精确格式)不起作用。仅用于截断字符串的结尾。
解决方法是在将传递给str.format
之前将字符串切片:
>>> '{pathname:>2}'.format(pathname='abcde'[-2:])
'de'
>>> '{pathname:>2}'.format(pathname='e'[-2:])
' e'
由于你无法控制传递给format
的参数,你可以创建一个str
的子类并重新定义格式,这样当它在关键字参数中遇到pathname
时它会被截断,然后调用原始的str.format
方法。
小型自足示例:
class TruncatePathnameStr(str):
def format(self,*args,**kwargs):
if "pathname" in kwargs:
# truncate
kwargs["pathname"] = kwargs["pathname"][-2:]
return str.format(self,*args,**kwargs)
s = TruncatePathnameStr('##{pathname:>4}##')
print(s.format(pathname='abcde'))
打印:
## de##
在现实生活中使用它:
logging.basicConfig(stream=sys.stdout, level=logging.INFO,style='{',
format=TruncatePathnameStr('{pathname:>90}{lineno:4d}{msg}'))