LINUX.ORG.RU

Форматирование в python


0

1

Возник вопрос, как в питоне центрировать строку в поле переменной длины. С ходу придумалось только такое решение:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

width = 30
print ('{0:*^'+str(width)+'}').format('I am uni')
print ('{0:*^'+str(width)+'}').format('Я юникод')
Но если строка в юникоде на русском языке, то форматирование куда то уползает:
***********I am uni***********
*******Я юникод********

>>> print u'qwertry'.center(30,'*')
***********qwertry************
>>> print u'фыва'.center(30,'*')
*************фыва*************
AIv ★★★★★
()
max@nix ~ % cat foo.py 
#!/usr/bin/env python3.2
# -*- coding: utf-8 -*-

width = 30
print (('{0:*^'+str(width)+'}').format('I am uni'))
print (('{0:*^'+str(width)+'}').format('Я юникод'))

max@nix ~ % ./foo.py 
***********I am uni***********
***********Я юникод***********
Begemoth ★★★★★
()
Ответ на: комментарий от generator

Я этот код привёл, потому что Alv привёл решение для Python 2, тебе надо использовать юникодные строки (они таковые в Python 3 по-умолчанию):

print (u'{0:*^'+str(width)+'}').format(u'I am uni')
print (u'{0:*^'+str(width)+'}').format(u'Я юникод')
Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

чтобы универсально - используй

from __future__ import unicode_literals

Тогда нужно строки без префикса u делать

mmarkk
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.