首页 > 解决方案 > 指定 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>

感谢帮助!

标签: pythonf-string

解决方案


你总是可以限制字符串长度,就像你对 any 做的那样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")

输出:

abcabcabcabcabcabcabcabcabcabcabcabcabcabcabc end line
xyzxyzxyzxyzxyzxyzxyzxyzxyzxyz                end line
xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzabcabcabcabcabc end line

推荐阅读