浅谈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使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
python开发之thread线程基础实例入门
Nov 11 Python
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
Python命令行解析模块详解
Feb 01 Python
Python实现的购物车功能示例
Feb 11 Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 Python
Python实现简单的列表冒泡排序和反转列表操作示例
Jul 10 Python
python使用sessions模拟登录淘宝的方式
Aug 16 Python
详解一种用django_cache实现分布式锁的方式
Sep 01 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 Python
Pycharm新手使用教程(图文详解)
Sep 17 Python
用python修改excel表某一列内容的操作方法
Jun 11 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
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
PHP类型约束用法示例
2016/09/28 PHP
php实现每日签到功能
2018/11/29 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
基于JavaScript实现焦点图轮播效果
2017/03/27 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
python strip()函数 介绍
2013/05/24 Python
python利用datetime模块计算时间差
2015/08/04 Python
理论讲解python多进程并发编程
2018/02/09 Python
浅谈Pandas Series 和 Numpy array中的相同点
2019/06/28 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
Python类继承和多态原理解析
2020/02/05 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
食品仓管员岗位职责
2015/04/01 职场文书
人事聘任通知
2015/04/21 职场文书
贷款收入证明格式
2015/06/24 职场文书
2015年幼儿园师德师风建设工作总结
2015/10/23 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis