浅谈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学习笔记(一)(基础入门之环境搭建)
Jun 05 Python
python结合shell查询google关键词排名的实现代码
Feb 27 Python
centos6.7安装python2.7.11的具体方法
Jan 16 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
Apr 08 Python
Python文件读写常见用法总结
Feb 22 Python
Python爬虫——爬取豆瓣电影Top250代码实例
Apr 17 Python
Python完成哈夫曼树编码过程及原理详解
Jul 29 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
用Python做一个久坐提醒小助手的示例代码
Feb 10 Python
用python-webdriver实现自动填表的示例代码
Jan 13 Python
python基础之函数的定义和调用
Oct 24 Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 16 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
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
PHP页面中文乱码分析
2013/10/29 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
PHP中文乱码解决方案
2015/03/05 PHP
使用GD库生成带阴影文字的图片
2015/03/27 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
jquery foreach使用示例
2013/09/12 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
Python中的闭包实例详解
2014/08/29 Python
python 统计代码行数简单实例
2017/05/04 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
硕士研究生个人求职信
2013/12/04 职场文书
师德师风的心得体会
2014/09/02 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书