浅谈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 相关文章推荐
virtualenv实现多个版本Python共存
Aug 21 Python
为什么说Python可以实现所有的算法
Oct 04 Python
关于numpy数组轴的使用详解
Dec 05 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
python如何实现单链表的反转
Feb 10 Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 Python
python 元组的使用方法
Jun 09 Python
selenium切换标签页解决get超时问题的完整代码
Aug 30 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
python 破解加密zip文件的密码
Apr 22 Python
只用40行Python代码就能写出pdf转word小工具
May 31 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 实现多服务器共享 SESSION 数据
2009/08/15 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
索趣科技的答案
2007/02/07 Javascript
5款Javascript颜色选择器
2009/10/25 Javascript
基于JQuery框架的AJAX实例代码
2009/11/03 Javascript
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
2016/04/17 Javascript
深入学习Bootstrap表单
2016/12/13 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
ES6小技巧之代替lodash
2019/06/07 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
JavaScript实现下拉列表
2021/01/20 Javascript
python list语法学习(带例子)
2013/11/01 Python
更改Python命令行交互提示符的方法
2015/01/14 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
pytorch标签转onehot形式实例
2020/01/02 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
意大利网上药房:Farmacia 33
2020/01/27 全球购物
产品销售计划书
2014/05/04 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android