python str.format与制表符\t关于中文对齐的细节问题
来源:互联网 发布:软件著作权申请加急 编辑:程序博客网 时间:2024/05/20 07:31
写了一个练手的爬虫...在输出的时候出现了让人很不愉♂悦的问题
像这样:
令人十分难受啊!
#-------------------------------------------------------------------------------------------------
在此之前先说一下python中的.format格式化输出
python2.6开始,可以使用str.format进行轻松的格式化,
如上可以看到,对变量的处理简洁灵活,此外对数字的各种位数处理也很到位
{:<x}的语法表示左对齐(>为右对齐,^为居中),少于x位自动补齐(默认为空格补齐)
这里值得注意的是,x也可以作为变量代入:
#-----------------------------------------------------------------------------------------------------
着手解决问题,
第一反应使用\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)))
大功告成!锵锵!
#------------------------------------------------------------------------
后话
这次写的主要是一个爬取几个主要交易网站以及steam上dota2饰品价格的爬虫,
里面遇到的问题其实也挺多的比如登录动态加载等等
等写的比较完善了大概也会一起发上来啦
(话说前一天晚上写完这个爬虫,第二天凌晨c5就炸了......怕不是我拥有了东方的神秘力量....
- python str.format与制表符\t关于中文对齐的细节问题
- Java关于"\t"制表符对齐的疑问
- python str.format()方法的基本用法
- Python中str的format()方法
- Python的print输出中文对齐问题
- Python 之 str.format()
- python-str-format
- Python str.format()函数
- python,str,format
- Python str.format
- str.Format问题
- python字符串format中英文空格对齐问题
- Python中文处理:str与unicode
- python 字符编码与解码——unicode、str和中文:UnicodeDecodeError: 'ascii' codec can't decode 分类: python
- python空格与制表符
- python: str.format (字符串 格式化)
- 关于sizeof(str)的问题
- python 字符编码与解码——unicode、str和中文:UnicodeDecodeError: 'ascii' codec can't decode
- Web 项目中 JSP 和 HTML 的取舍和资源引用时 "\" 根目录的寻找
- 状压DP 拯救莫莉斯
- Good Luck in CET-4 Everybody!(博弈)
- 创建型-单例模式(singleton)
- CountDownLatch监听初始化
- python str.format与制表符\t关于中文对齐的细节问题
- 【JVM】JVM执行引擎
- uva 10082 WERTYU
- 欢迎使用CSDN-markdown编辑器
- Next ESA SAR Toolbox (NEST)
- machine learning之介绍篇
- API--基本数据类型包装类
- 5.Android硬件访问服务使用反射
- linux 安装nginx