解决tabulate中文字符无法对齐的问题

解决tabulate中文字符无法对齐的问题

Tags
IT
经验
解决问题的日志记录
Published
February 21, 2023
Author
Dario Zhang

背景

使用tabulate库打印中文字符时,会出现列错位的情况。

问题原因

中英文字符的宽度不同,在默认情况下,tabulate 使用的是英文字符的宽度来对齐表格,但中文字符通常比英文字符要宽一些。因此,当表格中包含中文字符时,表格的列可能会因为中文字符宽度的不同而无法对齐。v0.8.8后,阿拉伯文和日文默认支持,但v0.9.0时仍然不支持中文。
# 查看版本 print(tabulate.__version__) # 查看对宽字符的支持情况,未安装wcwidth时是False print(tabulate.WIDE_CHARS_MODE)

解决方案一

可以使用 tabulatetablefmt 参数来指定表格输出格式,并选择支持中文字符的格式,例如 plainpipe。其中 plain 格式使用等宽字体,能够正确地对齐中文字符,而 pipe 格式使用的是 unicode 字符,也能够正确对齐中文字符。示例代码如下:
from tabulate import tabulate data = [['第一行', 1], ['第二行', 2], ['第三行', 3]] print(tabulate(data, headers=['文本', '数字'], tablefmt='pipe'))

解决方案二

安装wcwidth库,可以让tabulate所有格式支持中文字符
pip install wcwidth