浅谈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输出PowerPoint(ppt)文件中全部文字信息的方法
Apr 28 Python
Python读取网页内容的方法
Jul 30 Python
python机器人行走步数问题的解决
Jan 29 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
python使用Qt界面以及逻辑实现方法
Jul 10 Python
python创建与遍历List二维列表的方法
Aug 16 Python
Python从入门到精通之环境搭建教程图解
Sep 26 Python
keras 如何保存最佳的训练模型
May 25 Python
浅谈Python数学建模之固定费用问题
Jun 23 Python
Python实现排序方法常见的四种
Jul 15 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 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
YB217、YB235、YB400浅听
2021/03/02 无线电
PHP教程 变量定义
2009/10/23 PHP
php学习之简单计算器实现代码
2011/06/09 PHP
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
php中的注释、变量、数组、常量、函数应用介绍
2012/11/16 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
jquery实现图片按比例缩放示例
2014/07/01 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
python编程开发之类型转换convert实例分析
2015/11/13 Python
python列表的常用操作方法小结
2016/05/21 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
教师节促销方案
2014/03/22 职场文书
产品售后服务承诺书
2014/05/21 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
先进个人自荐书
2015/03/06 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
2015教师年度考核评语
2015/03/25 职场文书