浅谈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之深入变量和引用对象
Sep 24 Python
总结Python中逻辑运算符的使用
May 13 Python
Python制作简易注册登录系统
Dec 15 Python
python实现FTP服务器服务的方法
Apr 11 Python
Python随机数用法实例详解【基于random模块】
Apr 18 Python
Python打印输出数组中全部元素
Mar 13 Python
Django框架的使用教程路由请求响应的方法
Jul 03 Python
详解如何在Apache中运行Python WSGI应用
Jan 02 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
PyQt5实现画布小程序
May 30 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 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使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
jquery 模拟类搜索框自动完成搜索提示功能(改进)
2010/05/24 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
js数组的操作指南
2014/12/28 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
python实现获取序列中最小的几个元素
2014/09/25 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
python使用zip将list转为json的方法
2018/12/31 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
python带参数打包exe及调用方式
2019/12/21 Python
Python安装OpenCV的示例代码
2020/03/05 Python
详解Django配置JWT认证方式
2020/05/09 Python
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
实名检举信范文
2015/03/02 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书