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 #直接出字符串 ...
随机推荐
- effective c++ 条款7 declare virtual destructor for polymophyc base class
这似乎很明显. 如果base class的destructor不是virtual,当其derived class作为基类使用,析构的时候derived class的数据成员将不会被销毁. 举个例子 我 ...
- [ Talk is Cheap Show me the CODE ] : jQuery Mobile工具栏
[ Talk is Cheap Show me the CODE ] : jQuery Mobile工具栏 Written In The Font " Wirte less Do more& ...
- 跟我extjs5(03--在项目过程中加载文件)
跟我extjs5(03--在项目过程中加载文件) 上一节中用sencha工具自己主动创建了一个项目.而且能够在浏览器中查看. 如今我们来看看js类载入过程. 例如以下图所看到的: watermark/ ...
- sql server 数据库 只有mdf文件,如何附加
直接附加就可以,SQL 会提示LOG文件找不到,可删除提示的错误行,只附加MDF文件,附加成功后,SQL会自动创建LOG文件.
- mvc+webapi+dapper+ef codefirst项目搭建
首先项目是mvc5+webapi2.0+orm数据处理(dapper)+ef动态创建数据库. 1.项目框架层次结构: mvc项目根据不同的业务和功能进行不同的区域划分[今后项目维护起来方便],mode ...
- Thanks
今天,突然有一种爽的感觉.是做题做到爽的感觉,晚上就不是非常强烈了,脖子疼,要断了. 中午.妈妈给我打了电话,后来才知道爸爸的嗓子都哑了.说不出话来了都,哎,这都快一个月没有下雨了.地都干得要命了.好 ...
- EJB学习笔记
1 J2ee概述 J2ee是企业级的计算平台,它为分布式和基于组件的软件开发提供了一个“操作系统” Ant是什么工具?? EJB: 什么是EJB? 是一种server端组件结构,简化了开发分布式企 ...
- 经验19--C#大事
以前学过C#大事.但我还没有搞懂怎么弄. 这一次,他们下进行了研究. 1.定义参数类,对于参数的传递活动.(可以省略) public class UserEventArgs { ...
- Red Hat Enterprise Linux Server(RHEL) yum安装软件时This system is not registered with RHN. RHN support will be disabled. 的解决方法(转)
新安装了redhat6.5.安装后,登录系统,使用yum update 更新系统.提示: This system is not registered to Red Hat Subscription M ...
- Caused by: org.springframework.beans.factory.BeanCreationException
1.错误原因 2014-7-13 17:36:57 org.apache.jasper.compiler.TldLocationsCache tldScanJar 信息: At least one J ...