Python的print输出对齐

本文探讨了在Python中使用print函数进行字符串输出时,遇到的英文和中文对齐问题。当字符串包含中文时,由于半角空格与全角空格的宽度差异,导致对齐不准确。文章提出了两种解决方案:一是自定义对齐函数,通过判断字符串类型决定填充全角或半角空格;二是利用中文空格进行填充。同时,介绍了Python的格式化字符串方法以及ljust、rjust、center等函数在字符串对齐中的应用。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印


1、 在使用Python的内建函数print作英文输出时,应用格式化输出可以对齐得很好:

参考: https://docs.python.org/3/library/string.html#string-formatting

s1 = 'I am a long sentence.'
s2 = 'I\'m short.'
 
print '%-30s%-20s' %(s1,s2) #'%-30s' 含义是 左对齐,且占用30个字符位 
print '%-30s%-20s' %(s2,s1)

在这里插入图片描述

2、 但当字符串包含中文时,却发现它对齐得不是很好:

# -*- 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)

在这里插入图片描述
无法对齐。

原因是这样:在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)

在这里插入图片描述
在这里插入图片描述
引用: https://blog.csdn.net/sbdxxcjh/article/details/38051573

方法二、 宽度不够时采用中文空格填充

采用.format打印输出时,可以定义输出字符串的输出宽度,在 ‘:’ 后传入一个整数, 可以保证该域至少有这么多的宽度。 用于美化表格时很有用。。但是在打印多组中文的时候,不是每组中文的字符串宽度都一样,当中文字符宽度不够的时候,程序采用西文空格填充,中西文空格宽度不一样,就会导致输出文本不整齐
中文空格的编码为chr(12288)

tplt = "{0:{3}^10}\t{1:{3}^10}\t{2:^10}"
    print(tplt.format("学校名称", "位置", "分数", chr(12288)))
    for i in range(num):
        u = ulist[i]
        print(tplt.format(u[0], u[1], u[2], chr(12288)))
>>> List = [['A', 'B'], ['A134563421', 'B'], ['A', 'B']]
>>> for row in List:
   ... print '{0:30}{1}'.format(row[0], row[1])
   ... file.write('{0:30}{1}\n'.format(row[0], row[1]))

A                             B
A134563421                    B
A                             B

3、Python print 对齐打印,左对齐,右对齐

当需要打印如上左对齐的形式是,我们可以通过s.ljust() 之类的函数来处理。
(1)S.ljust(width,[fillchar])

其中,width 表示对齐的字符数,fillchar 表示空格部分可以用过给定的单个字符来填充,默认是空格。ljust中第一个字母‘l’代表左对齐,不足部分用fillchar填充,默认的为空格。类似地,S.rjust(width,[fillchar]) #右对齐,S.center(width, [fillchar]) # 中间对齐

在这里插入图片描述
在这里插入图片描述
右对齐
在这里插入图片描述

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值