Python ułatwia pad i wyrównać ciągi ASCII, tak jak poniżej:Jak nakładać i wyrównywać ciągi znaków Unicode za pomocą znaków specjalnych w pythonie?
>>> print "%20s and stuff" % ("test")
test and stuff
>>> print "{:>20} and stuff".format("test")
test and stuff
Ale jak mogę poprawnie pad oraz dostosowanie napisów Unicode, zawierających znaki specjalne? Próbowałem kilka sposobów, ale żaden z nich nie wydają się działać:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def manual(data):
for s in data:
size = len(s)
print ' ' * (20 - size) + s + " stuff"
def with_format(data):
for s in data:
print " {:>20} stuff".format(s)
def with_oldstyle(data):
for s in data:
print "%20s stuff" % (s)
if __name__ == "__main__":
data = ("xTest1x", "ツTestツ", "♠️ Test ♠️", "~Test2~")
data_utf8 = map(lambda s: s.decode("utf8"), data)
print "with_format"
with_format(data)
print "with_oldstyle"
with_oldstyle(data)
print "with_oldstyle utf8"
with_oldstyle(data_utf8)
print "manual:"
manual(data)
print "manual utf8:"
manual(data_utf8)
Daje urozmaicone wyjściowe:
with_format
xTest1x stuff
ツTestツ stuff
♠️ Test ♠️ stuff
~Test2~ stuff
with_oldstyle
xTest1x stuff
ツTestツ stuff
♠️ Test ♠️ stuff
~Test2~ stuff
with_oldstyle utf8
xTest1x stuff
ツTestツ stuff
♠️ Test ♠️ stuff
~Test2~ stuff
manual:
xTest1x stuff
ツTestツ stuff
♠️ Test ♠️ stuff
~Test2~ stuff
manual utf8:
xTest1x stuff
ツTestツ stuff
♠️ Test ♠️ stuff
~Test2~ stuff
to przy użyciu Python 2.7.
Myślę, że 'data_utf8' lepiej zmienić nazwę na" data_unicode ", ponieważ zawiera to drugie. – robyschek
to może być związane z tym pytaniem: http://stackoverflow.com/questions/4622357/how-to-control-padding-of-unicode-string-containing-east-asia-charicles –
Możesz być zainteresowany Unicode Standardowa koncepcja ["grupy grafemów"] (http://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries), która z grubsza odpowiada postaciom odbieranym przez użytkownika czytającego fragment tekstu i modułom stron trzecich do obliczeń klastry grafem, takie jak ['uniseg.graphemecluster'] (http://uniseg-python.readthedocs.io/en/latest/graphemecluster.html). Możliwe, że będziesz potrzebował dodatkowej obsługi dla znaków o zerowej szerokości i oczywiście dla czcionek o stałej szerokości, dopełnienie będzie działać inaczej. – user2357112