ubuntu - Python3.x的中文字符在Linux下面的占位问题?
迷茫
迷茫 2017-04-18 10:25:49
0
4
671

运行环境: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)
上海      |
北京      |
黑龙江     |
乌鲁木齐    |

请问这是什么原因?我观察了一下好像是中文字符在终端下面的输出都是占用了两个空格,但是英文只占用了一个空格。如果是这样,有什么好的解决方法?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

répondre à tous(4)
洪涛

Changez la police du terminal en une police à largeur fixe, comme la plus accrocheuse Consolas, la police open source d'Adobe Source Code Pro...

Peter_Zhu

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.

Peter_Zhu

La solution consiste à utiliser un remplissage spatial chinois sur toute la largeur, ce qui devrait vous aider.

>>> print("{:{space}<6s}".format("上海", space=chr(12288))+'|')
上海    |
>>> print("{:{space}<6s}".format("北京", space=chr(12288))+'|')
北京    |
>>> print("{:{space}<6s}".format("黑龙江", space=chr(12288))+'|')
黑龙江   |
>>> print("{:{space}<6s}".format("乌鲁木齐", space=chr(12288))+'|')
乌鲁木齐  |
>>> 
Peter_Zhu

segmentfault.com/q/1010000008288733/a-1020000008291692

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal