浅谈python str.format与制表符\t关于中文对齐的细节问题

 更新时间:2019年01月14日 09:46:07   作者:killercars  
今天小编就为大家分享一篇浅谈python str.format与制表符\t关于中文对齐的细节问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

写了一个练手的爬虫...在输出的时候出现了让人很不愉♂悦的问题

像这样:

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关于中文对齐的细节问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 对Django的restful用法详解(自带的增删改查)

    对Django的restful用法详解(自带的增删改查)

    今天小编就为大家分享一篇对Django的restful用法详解(自带的增删改查),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python实现数据结构中双向循环链表操作的示例

    python实现数据结构中双向循环链表操作的示例

    这篇文章主要介绍了python实现数据结构中双向循环链表操作的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Django 对象关系映射(ORM)源码详解

    Django 对象关系映射(ORM)源码详解

    这篇文章主要介绍了Django 对象关系映射(ORM)源码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • pycharm 解除默认unittest模式的方法

    pycharm 解除默认unittest模式的方法

    今天小编就为大家分享一篇pycharm 解除默认unittest模式的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 利用python的socket发送http(s)请求方法示例

    利用python的socket发送http(s)请求方法示例

    这篇文章主要给大家介绍了关于利用python的socket发送http(s)请求的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-05-05
  • python类继承与子类实例初始化用法分析

    python类继承与子类实例初始化用法分析

    这篇文章主要介绍了python类继承与子类实例初始化用法,实例分析了Python类的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • python机器学习理论与实战(四)逻辑回归

    python机器学习理论与实战(四)逻辑回归

    这篇文章主要为大家详细介绍了python机器学习理论与实战第四篇,逻辑回归的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Python heapq使用详解及实例代码

    Python heapq使用详解及实例代码

    这篇文章主要介绍了Python heapq使用详解及实例代码的相关资料,需要的朋友可以参考下
    2017-01-01
  • 分析用Python脚本关闭文件操作的机制

    分析用Python脚本关闭文件操作的机制

    这篇文章主要介绍了分析用Python脚本关闭文件操作的机制,作者分Python2.x版本和3.x版本两种情况进行了阐述,需要的朋友可以参考下
    2015-06-06
  • python Matplotlib模块的使用

    python Matplotlib模块的使用

    这篇文章主要介绍了python Matplotlib模块的使用,帮助大家更好的利用python处理图像,感兴趣的朋友可以了解下
    2020-09-09

最新评论