欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python str.format 中文对齐的细节问题

程序员文章站 2022-05-18 22:36:22
写了一个练手的爬虫...在输出的时候出现了让人很不愉♂悦的问题 像这样: 写了一个练手的爬虫...在输出的时候出现了让人很不愉♂悦的问题 像这样: 令人十分难受啊! # 令人十分难受啊! # 在此之前先说一下python中的.format格式化输出 python2.6开始,可以使用str.forma ......

写了一个练手的爬虫...在输出的时候出现了让人很不愉♂悦的问题

像这样:

python str.format 中文对齐的细节问题

令人十分难受啊!

#-------------------------------------------------------------------------------------------------

 在此之前先说一下python中的.format格式化输出
python str.format 中文对齐的细节问题

 

  python2.6开始,可以使用str.format进行轻松的格式化,
如上可以看到,对变量的处理简洁灵活,此外对数字的各种位数处理也很到位
{:<x}的语法表示左对齐(>为右对齐,^为居中),少于x位自动补齐(默认为空格补齐)
这里值得注意的是,x也可以作为变量代入:
python str.format 中文对齐的细节问题
  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)))结果十分接近理想了:
python str.format 中文对齐的细节问题

  还是有一些迷之问题导致1-0.5字节长度的偏差,猜测是由于中文字体不是等宽字体的缘故?
然而不用多虑,这里就可以使用一记粗暴的制表符\t解决问题了
print('[{name:<{len}}\tx'.format(name=name+']',len=22-len(name.encode('gbk'))+len(name)))
python str.format 中文对齐的细节问题

 


作者:killercars
来源:csdn
原文:https://blog.csdn.net/excaliburrr/article/details/76794451
版权声明:本文为博主原创文章,转载请附上博文链接!