Python的print中国输出对齐问题
问题叙述性说明:
在使用Python内置函数print当输出英语,应用格输出类型可以对齐很好:
s1 = 'I am a long sentence.'
s2 = 'I\'m short.' print '%-30s%-20s' %(s1,s2) #'%-30s' 含义是 左对齐,且占用30个字符位
print '%-30s%-20s' %(s2,s1)
输出:
注:
这里应用了最原始的cmd控制台,一些IDE自带的控制台(如Sublime text)可能会有不同的输出效果。
但当字符串包括中文时。却发现它对齐得不是非常好:
# -*- coding:utf-8 -*-
#author: Song Bo, Eagle, ZJU
#email: sbo@zju.edu.cn
s1 = '我是一个长句子,是的非常长的句子。'
s2 ='我是短句子' print '%-30s%-20s' %(s1,s2)
print '%-30s%-20s' %(s2,s1)
首先是出现乱码:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2JkeHhjamg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
cmd控制台并未正确解码utf-8编码。把s1和s2解码成unicode就可以:
s1 = u'我是一个长句子,是的非常长的句子。 '
s2 =u'我是短句子' print '%-30s%-20s' %(s1,s2)
print '%-30s%-20s' %(s2,s1)
输出:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2JkeHhjamg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
无法对齐。
原因是这样:在print中,函数为了实现字符串对齐,会在未达到指定长度的字符串末尾添上空格补齐。
可是,问题在这里,它会填入ASCII码为20的space,也就是半角空格。它的长度等于每一个字母或数字的宽度。但远比汉字的宽度小,所以导致补足后的字符串长度仍然不同。
解决方式:
重写一个格式对齐函数。函数中推断字符串是否是中文字符串,有的话则加入全角空格补齐,否则加入半角空格补齐。
# -*- coding:utf-8 -*-
#author: Song Bo, Eagle, ZJU
#email: sbo@zju.edu.cn def myAlign(string, length=0):
if length == 0:
return string
slen = len(string)
re = string
if isinstance(string, str):
placeholder = ' '
else:
placeholder = u' '
while slen < length:
re += placeholder
slen += 1
return re
s1 = u'我是一个长句子,是的非常长的句子。'
s2 =u'我是短句子' print myAlign(s1, 20) + myAlign(s2, 10)
print myAlign(s2, 20) + myAlign(s1, 10)
输出:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2JkeHhjamg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
中英混排:
Python的print中国输出对齐问题的更多相关文章
- Python中print函数输出时的左右对齐问题
为了将print函数输出的内容对齐,笔者在http://www.jb51.net/article/55768.htm中找到了左右对齐的方法.整理如下: 一.数值类型(int.float) # %d. ...
- Python——print函数输出对齐问题
原创声明:本文系博主原创文章,转载及引用请注明出处. 当我们使用print函数时,若指定输出宽度,例如: >>> import math >>> print('|P ...
- Python中print格式化输出
截取字符串输出,下面例子将只输出字符串的前3个字母 >>> str="abcdefg" >>> print "%.3s" % ...
- python 输出对齐
几种不同类型的输出对齐总结: 先看效果: 采用.format打印输出时,可以定义输出字符串的输出宽度,在 ':' 后传入一个整数, 可以保证该域至少有这么多的宽度. 用于美化表格时很有用. >& ...
- python print格式化输出。
python print格式化输出. 1. 打印字符串 print ("His name is %s"%("Aviad")) 效果: 2.打印整数 print ...
- python的print函数的格式化输出
使用print函数的时候,可以像C一样格式化输出,同时还支持参数化输出 print('%s' % ("CooMark")) print('整数|%d|' % (123)) prin ...
- Python print格式化输出
python中的print格式化输出,基本格式:"[字符串]%格式1[字符串]%格式2[字符串]....."%(string1,string2.....) 格式符号 ------- ...
- Python print函数用法,print 格式化输出
原文地址:http://blog.csdn.net/zanfeng/article/details/52164124 使用print输出各型的 字符串 整数 浮点数 出度及精度控制 strHello ...
- [转载]Python print函数用法,print 格式化输出
使用print输出各型的 字符串 整数 浮点数 出度及精度控制 strHello = 'Hello Python' print strHello #输出结果:Hello Python #直接出字符串 ...
随机推荐
- Struts的ONGL
1.什么是OGNL OGNL它是Object Graphic Navigation Language(对象图导航语言)缩写, 它是一个开源项目. Struts2框架使用OGNL作为默认的表达式语 ...
- Android应用-包装脚本批量方法
1. 设定ant周边环境 加入用户变量: 变量名:ANDROID_SDK_ROOT 变量值:D:\Android Develop\adt-bundle-windows-x86_64-20140321\ ...
- sails中文文档地址
http://sailsdoc.swift.ren/ Sails.js是一个Web框架,可以于轻松构建自定义,企业级Node.js Apps.它在设计上类似于像Ruby on Rails的MVC架构的 ...
- POJ 1915-Knight Moves (单向BFS && 双向BFS 比)
主题链接:Knight Moves 题意:8个方向的 马跳式走法 ,已知起点 和终点,求最短路 研究了一下双向BFS,不是非常难,和普通的BFS一样.双向BFS只是是从 起点和终点同一时候開始搜索,可 ...
- OCP-1Z0-051-题目解析-第14题
14. Using the CUSTOMERS table, you need to generate a report that shows 50% of each credit a ...
- Memcached全面剖析–5. memcached的应用和兼容程序
作者:长野雅广(Masahiro Nagano) 原文链接:http://gihyo.jp/dev/feature/01/memcached/0005 我是Mixi的长野.memcached的连载最 ...
- configure.ac:20: error: Autoconf version 2.65 or higher is required
安装thrift例如,下面的问题出现: configure.ac:20: error: Autoconf version 2.65 or higher is required wget http:// ...
- 2014百度之星预赛(第二场)——Best Financing
2014百度之星预赛(第二场)--Best Financing Problem Description 小A想通过合理投资银行理財产品达到收益最大化.已知小A在未来一段时间中的收入情况,描写叙述为两个 ...
- Kotlin
关于Kotlin,网上已有一些介绍的文章,包括Antonio Leiva的这组blog翻译稿.不过,我还是想跟进它们.翻译它们,以锻炼自己的英文翻译.各位高手发现问题,请及时“拍砖”. 原文题目:Ko ...
- SQLSERVER手动增长日志文件和数据文件
原文:SQLSERVER手动增长日志文件和数据文件 SQLSERVER手动增长日志文件和数据文件 手动增长日志文件,实际上就是修改日志文件的大小 size 的单位是MB 下面设置日志文件大小是204 ...