Средствами форматирования/интерполяции то что вы хотите нормально вряд ли получится сделать. Я бы просто пробелы после точек с запятой заменил на табы, потом уже к отформатированной строке применял метод строки expandtabs
:
format_string = 'module: "{module}";\tfile: "{filename}";\tline: "{lineno}";\tmsg: "{message}";'
module = "views"
filename = "views.py"
lineno = 62
message = "text"
formatted = format_string.format(module=module, filename=filename, lineno=lineno, message=message)
print(formatted) # вывод с табами, результат зависит от настроек размера табуляции терминала / редактора и т.д.
print(formatted.expandtabs()) # по умолчанию tab заменяется выравниванием под 8 символов
print(formatted.expandtabs(32)) # выравнивание под 32 символа
Примерный вывод:
module: "views"; file: "views.py"; line: "62"; msg: "text";
module: "views"; file: "views.py"; line: "62"; msg: "text";
module: "views"; file: "views.py"; line: "62"; msg: "text";
Выравнивание под N символов означает, что кусок после символа табуляции будет выровнен под ближайшую позицию от начала строки, кратную N.
Например для таба размером 8:
module: "views"; file: "views.py"; line: "62"; msg: "text";
^14 ^32 ^42 ^48 ^60 ^64
Первый маркер в каждой паре - позиция, на которой могла продолжиться строка при табе = 1 пробелу, видно что каждый раз число не кратно 8. Второй маркер - позиция строки после "развертки" табов, строка становится сдвинута так, чтобы позиция стала кратной 8.