python 针对中英混合的对齐输出问题(支持单字符串中英混合的对齐)

python中英对齐输出发现总对不齐,原因是中文与字母数字的占位大小不统一导致,尝试%s,format都不能实现对齐。看了https://fishc.com.cn/thread-67465-1-1.html的回帖内容实现如下发现的确可用(只为实现,算法烂的一比,最好自己优化下),缺点是gb2312不支持的字符会出错。

def my_format(str,width,align):#定义函数接受三个参数:要输出的字符串(str)、总占用宽度(int)、对齐方式(str:l、r、c对应左右中)
	sigle=0
	double=0
	sep='.'#定义占位符
	for i in str:#统计单字宽和双字宽的数目
		if len(i.encode('gb2312'))==1:
			sigle+=1
		elif len(i.encode('gb2312'))==2:
			double+=1
	if align=='l':
		return str+(width*2-sigle-double*2)*sep
	elif align=='r':
		return (width*2-sigle-double*2)*sep+str
	elif align=='c':
		return int((width*2-sigle-double*2)//2)*sep+str+int((width*2-sigle-double*2)-(width*2-sigle-double*2)//2)*sep
#测试输出格式
print(my_format("中文abc",6,'r'),my_format("中文abc",6,'c'),my_format("中文abc",6,'l'))
print(my_format("中文",6,'r'),my_format("中文abc",6,'c'),my_format("中文abc",6,'l'))
print(my_format("中文abc",6,'r'),my_format("中文",6,'c'),my_format("中文abc",6,'l'))

输出:

.....中文abc ..中文abc... 中文abc.....
........中文 ..中文abc... 中文abc.....
.....中文abc ....中文.... 中文abc.....

 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值