#python #f-string
#python #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>
Ценю помощь!
Комментарии:
1.
{level: <8}
Часть делает это; вы можете сделать{name ":" function ":" line: <45}
точно так же.
Ответ №1:
Вы всегда можете ограничить длину строки, точно так же, как вы бы поступили с любым 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
Комментарии:
1. Спасибо за ваш ответ, к сожалению, это не выравнивает строку справа от ‘x’ и ‘y’. Желаемый результат будет выровнен по «конечной строке»
2. @TylerWeiss — посмотрите сейчас — это должно сработать (возможно, вы захотите упаковать все это в функцию для ясности кода)