有些时候,我们需要在终端使用表格的形式打印一些文字,如下图所示,怎么实现呢?

表格示意图

如果我们打印的是字母或者数字,那么其实比较简单,可以使用如下的python代码

print('{0:<40s}'.format('Big face.'))

但是如果字符串中包含中文,这样是不行的,因为中文一个字符实际上占用两个字符的空间。假设如下的代码变量中bus_station包含snostationname两个键,其中sno的值为数字,stationname的值为中文字符串。可以使用如下的代码实现打印不同的序号和站名占用相同的空间。

station_no = bus_station['sno']
station_name = bus_station['stationname']
output_station = '{0:<2d}: {1}'.format(station_no, station_name)

# 校正占位符
correct_space = 30 - len(station_name)
# 进一步校正,排除非汉字的情况
if 'S1' in station_name:
    correct_space = correct_space + 2

# 嵌套格式化
print(u'{1:<{0}s}'.format(correct_space, output_station), end="")