我有一个包含日本角色以及“正常”角色的数组。如何对齐这些打印件?
#!/usr/bin/python # coding=utf-8 a1=['する', 'します', 'trazan', 'した', 'しました'] a2=['dipsy', 'laa-laa', 'banarne', 'po', 'tinky winky'] for i,j in zip(a1,a2): print i.ljust(12),':',j print '-'*8 for i,j in zip(a1,a2): print i,len(i) print j,len(j)
输出:
する : dipsy します : laa-laa trazan : banarne した : po しました : tinky winky -------- する 6 dipsy 5 します 9 laa-laa 7 trazan 6 banarne 7 した 6 po 2 しました 12 tinky winky 11
谢谢,// Fredrik
使用该unicodedata.east_asian_width函数,在计算字符串的长度时,跟踪哪些字符窄和宽。
unicodedata.east_asian_width
#!/usr/bin/python # coding=utf-8 import sys import codecs import unicodedata out = codecs.getwriter('utf-8')(sys.stdout) def width(string): return sum(1+(unicodedata.east_asian_width(c) in "WF") for c in string) a1=[u'する', u'します', u'trazan', u'した', u'しました'] a2=[u'dipsy', u'laa-laa', u'banarne', u'po', u'tinky winky'] for i,j in zip(a1,a2): out.write('%s %s: %s\n' % (i, ' '*(12-width(i)), j))
する : dipsy します : laa-laa trazan : banarne した : po しました : tinky winky
在某些Web浏览器字体中,它看起来不正确,但是在终端窗口中,它们正确对齐。