浅谈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代码制作configure文件示例
Jul 28 Python
Python字符串拼接六种方法介绍
Dec 18 Python
Python反转序列的方法实例分析
Mar 21 Python
python删除本地夹里重复文件的方法
Nov 19 Python
python装饰器练习题及答案
Nov 01 Python
python每5分钟从kafka中提取数据的例子
Dec 23 Python
Django 用户登陆访问限制实例 @login_required
May 13 Python
浅谈如何使用python抓取网页中的动态数据实现
Aug 17 Python
基于python实现复制文件并重命名
Sep 16 Python
Python操作word文档插入图片和表格的实例演示
Oct 25 Python
彻底解决Python包下载慢问题
Nov 15 Python
Django + Taro 前后端分离项目实现企业微信登录功能
Apr 07 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的保留变量问题
2008/10/23 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
星球大战与Python之间的那些事
2016/01/07 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
python实现微信自动回复功能
2018/04/11 Python
TensorFlow实现模型评估
2018/09/07 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
python实现图片筛选程序
2018/10/24 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
2019/08/09 Python
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
浅谈HTML5 &amp; CSS3的新交互特性
2016/07/19 HTML / CSS
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
社团文化节邀请函
2014/01/10 职场文书
音乐教育感言
2014/03/05 职场文书
私人委托书格式
2014/09/10 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS