指定 f 字符串中连接变量的宽度

问题描述

我正在使用 loguru 包登录我的 python 项目。

https://github.com/Delgan/loguru

我希望覆盖认格式,以便我可以为模块/函数/行号字符串指定一个固定的。

这是认格式...

'<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>'

输出是这样的......

2020-12-28 14:36:27.510 | INFO     | package1.module1:function:132 - Listing Users...
2020-12-28 14:36:27.601 | ERROR    | package10.module10:function10:1000 - The provided token has expired

我想向包/模块/函数添加静态宽度/填充,这样输出看起来像......

2020-12-28 14:36:27.510 | INFO     | package1.module1:function:132      - Listing Users...
2020-12-28 14:36:27.601 | ERROR    | package10.module10:function10:1000 - The provided token has expired

问题是带有函数行号的完整路径是由 3 个变量构成的...

<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan>

有什么办法可以指定字符串组合的宽度吗?像……

<cyan>{name + ":" + function + ":" + line : 45}</cyan>

感谢您的帮助!

解决方法

你总是可以限制字符串长度,就像你对任何 ->filter() 所做的一样:

sequence

输出:

# 150 chars string:
x = "abc" * 50

# 30 chars string:
y = "xyz" * 10

# predefined display limit:
n = 45

spaces = " " * n
print(f"{(x+spaces)[:n]} end line")
print(f"{(y+spaces)[:n]} end line")
print(f"{(y+x+spaces)[:n]} end line")