Pythonカスタムフォーマッターを備えた標準のログモジュールを使用しており、一部のフィールドの長さを制限しています。標準の%
Python演算子を使用しています。
このようにパーセント形式の文字列に制限を適用できます(これにより長さが10文字に制限されます):
>>> "%.10s" % "Lorem Ipsum"
'Lorem Ipsu'
最初からトリミングすることは可能ですか?出力は'orem Ipsum'
(右側の引数を操作せずに)ですか?
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'
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に保存することは可能ですが、元の名前も保持したかったのです。