浅谈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 sys模块sys.path使用方法示例
Dec 04 Python
python自定义异常实例详解
Jul 11 Python
flask框架中勾子函数的使用详解
Aug 01 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
django的model操作汇整详解
Jul 26 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
Pycharm无法打开双击没反应的问题及解决方案
Aug 17 Python
Python 3.9的到来到底是意味着什么
Oct 14 Python
python查询MySQL将数据写入Excel
Oct 29 Python
python中字符串的编码与解码详析
Dec 03 Python
Django框架中视图的用法
Jun 10 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
德劲1107的电路分析与打磨
2021/03/02 无线电
PHP 日期加减的类,很不错
2009/10/10 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
详解基于angular-cli配置代理解决跨域请求问题
2017/07/05 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
NodeJS实现自定义流的方法
2018/08/01 NodeJs
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
Python进行数据提取的方法总结
2016/08/22 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
nohup的用法
2014/08/10 面试题
JPA的特点
2014/10/25 面试题
岗位聘任书范文
2014/03/29 职场文书
人代会标语
2014/06/30 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript