浅谈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使用datetime模块计算各种时间间隔的方法
Mar 24 Python
使用python实现正则匹配检索远端FTP目录下的文件
Mar 25 Python
Python的多态性实例分析
Jul 07 Python
详解Python的collections模块中的deque双端队列结构
Jul 07 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
Python-接口开发入门解析
Aug 01 Python
pytorch索引查找 index_select的例子
Aug 18 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 Python
python数值基础知识浅析
Nov 19 Python
Selenium alert 弹窗处理的示例代码
Aug 06 Python
如何在Anaconda中打开python自带idle
Sep 21 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
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
php中判断文件空目录是否有读写权限的函数代码
2012/08/07 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
jquery 表单进行客户端验证demo
2009/08/24 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
2015/06/19 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
Python中if elif else及缩进的使用简述
2018/05/31 Python
pandas中的series数据类型详解
2019/07/06 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
基于matplotlib xticks用法详解
2020/04/16 Python
Python转换字典成为对象,可以用&quot;.&quot;方式访问对象属性实例
2020/05/11 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
Python图像读写方法对比
2020/11/16 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
标准自荐信范文
2014/01/29 职场文书
律师授权委托书范本
2014/10/07 职场文书
医者仁心观后感
2015/06/17 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL