运行环境:python3.x + ubuntu
def print_table(table):
max_width = 0 # 取table中最长元素
for x in table:
if len(x) > col_width:
max_width = len(x)
max_width = max_width * 2
for x in table:
print('{:{}}'.format(x, max_width) + '|')
英文可以正常对齐:
>>> en = ['hello', 'world', 'hi', 'bug']
>>> print_table(en)
hello |
world |
hi |
bug |
中文无法无法正常对齐:
>>> ch = ['上海', '北京', '黑龙江', '乌鲁木齐']
>>> print_table(ch)
上海 |
北京 |
黑龙江 |
乌鲁木齐 |
请问这是什么原因?我观察了一下好像是中文字符在终端下面的输出都是占用了两个空格,但是英文只占用了一个空格。如果是这样,有什么好的解决方法?
Changez la police du terminal en une police à largeur fixe, comme la plus accrocheuse Consolas, la police open source d'Adobe Source Code Pro...
La longueur des chaînes Unicode est calculée en fonction du nombre de caractères plutôt que de la "largeur affichée". Un caractère chinois et un caractère occidental comptent tous deux pour 1, ils ne sont donc pas alignés. Vous pouvez utiliser le package wcwidth supplémentaire pour calculer le nombre de cellules occupées par un caractère.
La solution consiste à utiliser un remplissage spatial chinois sur toute la largeur, ce qui devrait vous aider.
segmentfault.com/q/1010000008288733/a-1020000008291692