Align unicode text in terminal window using default monospace font

后端 未结 1 1540
时光取名叫无心
时光取名叫无心 2020-12-20 01:04

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

相关标签:
1条回答
  • 2020-12-20 01:27

    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.

    0 讨论(0)
提交回复
热议问题