背景
使用
tabulate
库打印中文字符时,会出现列错位的情况。问题原因
中英文字符的宽度不同,在默认情况下,
tabulate
使用的是英文字符的宽度来对齐表格,但中文字符通常比英文字符要宽一些。因此,当表格中包含中文字符时,表格的列可能会因为中文字符宽度的不同而无法对齐。v0.8.8后,阿拉伯文和日文默认支持,但v0.9.0时仍然不支持中文。# 查看版本 print(tabulate.__version__) # 查看对宽字符的支持情况,未安装wcwidth时是False print(tabulate.WIDE_CHARS_MODE)
解决方案一
可以使用
tabulate
的 tablefmt
参数来指定表格输出格式,并选择支持中文字符的格式,例如 plain
或 pipe
。其中 plain
格式使用等宽字体,能够正确地对齐中文字符,而 pipe
格式使用的是 unicode 字符,也能够正确对齐中文字符。示例代码如下:from tabulate import tabulate data = [['第一行', 1], ['第二行', 2], ['第三行', 3]] print(tabulate(data, headers=['文本', '数字'], tablefmt='pipe'))
解决方案二
安装
wcwidth
库,可以让tabulate
所有格式支持中文字符pip install wcwidth