浅谈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列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
Python实现的简单算术游戏实例
May 26 Python
python使用threading获取线程函数返回值的实现方法
Nov 15 Python
Django实现组合搜索的方法示例
Jan 23 Python
python xlsxwriter库生成图表的应用示例
Mar 16 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
python把转列表为集合的方法
Jun 28 Python
pip指定python位置安装软件包的方法
Jul 12 Python
Python Numpy 自然数填充数组的实现
Nov 28 Python
Python读取yaml文件的详细教程
Jul 21 Python
python实现剪贴板的操作
Jul 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代码
2008/09/10 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
php实现微信扫码支付
2017/03/26 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
拖动一个HTML元素
2006/12/22 Javascript
javascript 循环读取JSON数据的代码
2010/07/17 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
微信小程序错误this.setData报错及解决过程
2019/09/18 Javascript
Vue组件基础用法详解
2020/02/05 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
Python的净值数据接口调用示例分享
2016/03/15 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
Pygame的程序开始示例代码
2020/05/07 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
写给爸爸的道歉信
2014/01/15 职场文书
初三化学教学反思
2014/01/23 职场文书
放飞理想演讲稿
2014/09/09 职场文书
失恋33天观后感
2015/06/11 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
SQL中的三种去重方法小结
2021/11/01 SQL Server
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL