Я использую Python 3.6, пытаясь выяснить, почему форматирование выравнивания строк не работает при использовании цветовых кодов ANSI. Я нашел 2 сообщения, которые предполагают, что включение цветовых кодов увеличивает длину строки, поэтому отступы должны быть соответствующим образом скорректированы, но, похоже, это не то, с чем я столкнулся. Например,
Без цветовой кодировки выравнивание по правому краю работало просто отлично.
txt=['a','b','c']
print(('{:>20}'*3).format(*txt))
a b c
При добавленном цветовом коде общая длина строки равна 10 и должна вписываться в ширину поля, но не похоже, что формат выравнивания был применен к 'b'.
txt2=['a','\u001b[43mb\u001b[0m','c']
print(len(txt2[1]))
10
print(('{:>20}'*3).format(*txt2))
a b c
Чтобы решить эту проблему, мне пришлось явным образом дополнить строку следующим образом:
txt3=['a','\u001b[43m'+'{:>20}'.format('b')+'\u001b[0m','c']
print(('{:>20}'*3).format(*txt3))
a b c
1. Кто-нибудь может объяснить это поведение?
2. В целом, как лучше всего комбинировать раскраска и форматирование строк в ситуациях, когда цвет и отступы являются условными (т. е. сгенерированы в сценарии)
Вот два поста, которые я нашел, которые наиболее актуальны, но я не смог дополнить их комментариями / вопросы: - (
`` str.format () `Python, символы заливки и цвета ANSI
Выравнивание строк не работает с цветами ANSI