浅谈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编程中的异常处理教程
Aug 21 Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
python3使用matplotlib绘制条形图
Mar 25 Python
Django 静态文件配置过程详解
Jul 23 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
Sep 11 Python
python getopt模块使用实例解析
Dec 18 Python
Django使用rest_framework写出API
May 21 Python
详解python日志输出使用配置文件格式
Feb 10 Python
安装不同版本的tensorflow与models方法实现
Feb 20 Python
python 第三方库paramiko的常用方式
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
如何在PHP中使用正则表达式进行查找替换
2013/06/13 PHP
php动态生成函数示例
2014/03/21 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
使用PHP实现生成HTML静态页面
2015/11/18 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
基于JQuery的密码强度验证代码
2010/03/01 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
使用正则表达式的格式化与高亮显示json字符串
2014/12/03 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
从Python程序中访问Java类的简单示例
2015/04/20 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
Python调用飞书发送消息的示例
2020/11/10 Python
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
《唯一的听众》教学反思
2014/02/20 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
基于Python实现一个春节倒计时脚本
2022/01/22 Python