浅谈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进程管理工具supervisor使用实例
Sep 17 Python
Python contextlib模块使用示例
Feb 18 Python
Python使用metaclass实现Singleton模式的方法
May 05 Python
Python中将字典转换为列表的方法
Sep 21 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
Python中print和return的作用及区别解析
May 05 Python
Pyqt QImage 与 np array 转换方法
Jun 27 Python
解决yum对python依赖版本问题
Jul 05 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
python实现本地批量ping多个IP的方法示例
Aug 07 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
Jun 18 Python
Python3如何使用多线程升程序运行速度
Aug 11 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自定义函数实现代码
2011/12/30 PHP
ThinkPHP控制器详解
2015/07/27 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
2016/05/21 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
2019/08/07 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python sys.argv用法实例
2015/05/28 Python
Python实现控制台中的进度条功能代码
2017/12/22 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
金融专业毕业生推荐信
2013/11/26 职场文书
怎样写好自我鉴定
2013/12/04 职场文书
毕业生就业自荐书
2013/12/15 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
《菜园里》教学反思
2014/04/17 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
教师群众路线心得体会
2014/11/04 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers