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.....