浅谈python str.format与制表符\t关于中文对齐的细节问题


Posted in Python onJanuary 14, 2019

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

像这样:

浅谈python str.format与制表符\t关于中文对齐的细节问题

令人十分难受啊!

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

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

浅谈python str.format与制表符\t关于中文对齐的细节问题

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

如上可以看到,对变量的处理简洁灵活,此外对数字的各种位数处理也很到位

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

这里值得注意的是,x也可以作为变量代入:

浅谈python str.format与制表符\t关于中文对齐的细节问题

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

着手解决问题,

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

浅谈python str.format与制表符\t关于中文对齐的细节问题

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

结果却是这样的:

浅谈python str.format与制表符\t关于中文对齐的细节问题

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与制表符\t关于中文对齐的细节问题

还是有一些迷之问题导致1-0.5字节长度的偏差,猜测是由于中文字体不是等宽字体的缘故?

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

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

浅谈python str.format与制表符\t关于中文对齐的细节问题

大功告成!锵锵!

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

后话

这次写的主要是一个爬取几个主要交易网站以及steam上dota2饰品价格的爬虫,里面遇到的问题其实也挺多的比如登录动态加载等等

等写的比较完善了大概也会一起发上来啦~

以上这篇浅谈python str.format与制表符\t关于中文对齐的细节问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python计算书页码的统计数字问题实例
Sep 26 Python
Python实现统计英文单词个数及字符串分割代码
May 28 Python
Python中逗号的三种作用实例分析
Jun 08 Python
python制作企业邮箱的爆破脚本
Oct 05 Python
python读取二进制mnist实例详解
May 31 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
Jul 06 Python
django 常用orm操作详解
Sep 13 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 Python
如何使用python实现模拟鼠标点击
Jan 06 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
Django如何批量创建Model
Sep 01 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 #Python
对Python多线程读写文件加锁的实例详解
Jan 14 #Python
Python多进程写入同一文件的方法
Jan 14 #Python
python 将大文件切分为多个小文件的实例
Jan 14 #Python
使用k8s部署Django项目的方法步骤
Jan 14 #Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 #Python
python中使用 xlwt 操作excel的常见方法与问题
Jan 13 #Python
You might like
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
探讨php中header的用法详解
2013/06/07 PHP
php表单提交实例讲解
2015/11/12 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
让元素在网页中可拖动示例代码
2013/08/13 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
Nodejs搭建wss服务器教程
2017/05/24 NodeJs
详解vee-validate的使用个人小结
2017/06/07 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
深入浅析vue全局环境变量和模式
2020/04/28 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
Python中的集合类型知识讲解
2015/08/19 Python
python生成式的send()方法(详解)
2017/05/08 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
python 追踪except信息方式
2020/04/25 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
水产养殖学应届生求职信
2013/09/29 职场文书
《长相思》听课反思
2014/04/10 职场文书
工作评语大全
2014/04/26 职场文书
后天观后感
2015/06/08 职场文书
python实现图片批量压缩
2021/04/24 Python