浅谈python str.format与制表符\\t关于中文对齐的细节问题
作者:killercars 发布时间:2023-05-23 00:39:56
写了一个练手的爬虫...在输出的时候出现了让人很不愉♂悦的问题
像这样:
令人十分难受啊!
#------------------------------------------
在此之前先说一下python中的.format格式化输出
python2.6开始,可以使用str.format进行轻松的格式化,
如上可以看到,对变量的处理简洁灵活,此外对数字的各种位数处理也很到位
{:<x}的语法表示左对齐(>为右对齐,^为居中),少于x位自动补齐(默认为空格补齐)
这里值得注意的是,x也可以作为变量代入:
#------------------------------------------
着手解决问题,
第一反应使用\t制表符,带来的问题便是字符串长度差距超过一个制表位时,会跳到下一个制表位,如图:
不能接受,使用str.format补齐name属性的长度为25
结果却是这样的:
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)))
结果十分接近理想了:
还是有一些迷之问题导致1-0.5字节长度的偏差,猜测是由于中文字体不是等宽字体的缘故?
然而不用多虑,这里就可以使用一记粗暴的制表符\t解决问题了
print('[{name:<{len}}\tx'.format(name=name+']',len=22-len(name.encode('GBK'))+len(name)))
大功告成!锵锵!
#------------------------------------------
后话
这次写的主要是一个爬取几个主要交易网站以及steam上dota2饰品价格的爬虫,里面遇到的问题其实也挺多的比如登录动态加载等等
等写的比较完善了大概也会一起发上来啦~
来源:https://blog.csdn.net/Excaliburrr/article/details/76794451
猜你喜欢
- 本文实例讲述了Symfony2框架创建项目与模板设置的方法。分享给大家供大家参考,具体如下:环境准备与概览习惯于在windows使用netb
- mysql数据库数据表和数据表关联--问题??用户数据表user 字词作品数据表article 短信 message外键ID 主键,之间的关
- 这篇文章主要介绍了Python动态声明变量赋值代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 本文代码需要正确安装Python扩展库pywin32,建议下载whl文件进行离线安装。然后调用win32api的ShellExecute()
- 本文实例讲述了Python从序列中移除重复项且保持元素间顺序不变的方法。分享给大家供大家参考,具体如下:问题:从序列中移除重复的元素,但仍然
- 加上设置字符编码的方法:response.setHeader("charset","gb2312")
- 本人电脑上的Python为3.5,安装在Windows上,虽然安装过程中选择了pip,但是在命令行输入pip后仍然不能成功,尝试一下方法,终
- $str=preg_replace("/\s+/", " ", $str); //过滤多余回车 $s
- ASP正则表达式,RegExp对象提供简单的正则表达式支持功能。RegExp对象的用法: Function RegExpTest(
- 前言在默认情况下,Python的新类和旧类的实例都有一个字典来存储属性值。这对于那些没有实例属性的对象来说太浪费空间了,当需要创建大量实例的
- 1. 什么是phpDocumentor ? PHPDocumentor 是一个用PHP写的工具,对于有规范注释的php程序,它能够快速生成具
- 说起INDEX SERVER,我自己本来用的也不多,不过前两天公司要做一个INDEX的搜索,我从网上找了好多的资料,仔细分析了以后自己启动了
- 支持聚合函数的方法:提到聚合函数,首先我们要知道的就是这些聚合函数是不能在django中单独使用的,要想在django中使用这些聚合函数,就
- 公布到网页上的Email经常会被一些工具自动提取,一些非法用户就会利用所提取的Email大肆发送垃圾邮件。这些工具大多都是查找链接中“mai
- :hover是我们在CSS设计中最常运用的伪类之一,许多绚丽效果的实现离不开伪类:hover,比如我们常见的纯CSS菜单、相册效果等等。或许
- ASP 能快速执行你的 * 页,但你还可以通过紧缩代码和数据库连接以使它们执行更快。这是一篇关于怎样精简代码和Asp 特征以获得最快执行速度
- Python中使用threading.Condition交替打印两个字符的程序。这个程序涉及到两个线程的的协调问题,两个线程为了能够相互协调
- 在 PHP 中实现异步定时多任务消息推送的方式有多种,其中一种常用的方式是使用异步任务队列。以下是一个简单的步骤:安装和配置消息队列服务(如
- 目录需求分析进一步分析再进一步分析代码实现我们在写爬虫的过程中,除了研究反爬之外,几乎全部的时间都在写解析逻辑。那么,生命苦短,为什么我们不
- 本文实例为大家分享了js实现QQ邮箱邮件拖拽删除的具体代码,供大家参考,具体内容如下步骤分析:根据数据结构生成HTML结构全选和单选功能的实