运行环境: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)
上海 |
北京 |
黑龙江 |
乌鲁木齐 |
请问这是什么原因?我观察了一下好像是中文字符在终端下面的输出都是占用了两个空格,但是英文只占用了一个空格。如果是这样,有什么好的解决方法?
更換終端的字體,更換為等寬字體,像比較養眼的Consolas,Adobe 的開源字體 Source Code Pro...
Unicode字串算長度是按照字元數而不是“顯示出來的寬度”,一個漢字和一個西文都算1的,所以對不齊。可以用額外的wcwidth套件來計算字元佔用的格子數。
解決方法是使用中文全角空格填充,應該對你有幫助。
segmentfault.com/q/1010000008288733/a-1020000008291692