python对齐输出

这个问题烦恼了挺久,通常状况下我都是用\t解决,但其实这样的办法并非很nice,而后今天在写一个demo的时候实在看不下去,就百度科普了一波,确实是有比较nice的解决方案。python

像这样:字体

 

使人十分难受啊!编码

#-------------------------------------------------------------------------------------------------spa

在此以前先说一下python中的.format格式化输出code

python2.6开始,可使用str.format进行轻松的格式化,orm

如上能够看到,对变量的处理简洁灵活,此外对数字的各类位数处理也很到位blog

{:<x}的语法表示左对齐(>为右对齐,^为居中),少于x位自动补齐(默认为空格补齐)utf-8

这里值得注意的是,x也能够做为变量代入:字符串

 

#-----------------------------------------------------------------------------------------------------table

着手解决问题,

第一反应使用\t制表符,带来的问题即是字符串长度差距超过一个制表位时,会跳到下一个制表位,如图:

不能接受,使用str.format补齐name属性的长度为25

结果倒是这样的:

  

py虽好,有些细节仍是没有照顾到中文

这里补齐长度时中文字符也按1字节计算了,

然而咱们知道,utf-8中中文占用3个字节,GBK中占用了2个字节,只算做1字节显然不能对齐

这时求助于prettytable包输出表格,然而输出也不理想,能够想象也没有考虑中文编码的问题(或是须要设置编码为utf-8或gbk?)

分析一下理想的name所占的长度,应为固定的x字节(这里按目前的爬取结果暂时取22)

那么他的补齐长度应为

len = 22 - gbk编码下name的字节数 + name的字符数

幸运的是str.format支持使用变量代替补齐长度的值

尝试如下代码:

print('[{name:<{len}}x'.format(name=name+']',len=22-len(name.encode('GBK'))+len(name)))

结果十分接近理想了:

仍是有一些迷之问题致使1-0.5字节长度的误差,猜想是因为中文字体不是等宽字体的缘故?

然而不用多虑,这里就可使用一记粗暴的制表符\t解决问题了

print('[{name:<{len}}\tx'.format(name=name+']',len=22-len(name.encode('GBK'))+len(name)))

大功告成!

相关文章
相关标签/搜索