I am pulling data from the web and want to align it in a table in a terminal window. I can align the text fine in most cases but when the text contains certain symbols or f
The special behaviour for those particular characters can be identified using the East Asian width property from their Unicode data. Taking the suggestion from Programmatically tell if a Unicode character takes up more than one character space in a terminal and using that value for alignment:
#!/usr/bin/python3
import unicodedata
items = "Apple tree", "Banana plant", "Orange 으르", "Goodbye"
values = 100, 200, 300, 400
for i, v in zip(items, values):
eawid = len(i) + sum(1 for v in i if unicodedata.east_asian_width(v) == 'W')
pad = ' ' * (15 - eawid)
print("%s%s : %-4s" % (i, pad, v))
gives:
Apple tree : 100
Banana plant : 200
Orange 으르 : 300
Goodbye : 400
This may appear misaligned if your browser is using a 1.5-width glyph for those characters; in my terminal, plan
is exactly the same width as 으르
.
Syntax here is Python 3, but the same technique works in 2.7.