浅谈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局部赋值的规则
Mar 07 Python
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
解析Python中的异常处理
Apr 28 Python
在Python的Django框架下使用django-tagging的教程
May 30 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
Python中Unittest框架的具体使用
Aug 27 Python
python网络爬虫 CrawlSpider使用详解
Sep 27 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
Dec 05 Python
Python实现对word文档添加密码去除密码的示例代码
Dec 29 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 12 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 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
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
php生成xml简单实例代码
2009/12/16 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
Python SQLite3简介
2018/02/22 Python
python截取两个单词之间的内容方法
2018/12/25 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
django foreignkey(外键)的实现
2019/07/29 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
2019/10/11 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
海淘母婴商城:国际妈咪
2016/07/23 全球购物
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
火山动力Java笔试题
2014/06/26 面试题
建筑施工实习自我鉴定
2013/09/19 职场文书
五年后的职业生涯规划
2014/03/04 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
埃及王子观后感
2015/06/16 职场文书
汽车车尾标语大全
2015/08/11 职场文书
护士业务学习心得体会
2016/01/25 职场文书
NGINX 权限控制文件预览和下载的实现原理
2022/01/18 Servers
DSP接收机前端设想
2022/04/05 无线电