Python学习05-中英文字体格式化补充

查看所有Python相关学习笔记

文章参考:Python学习-格式化
本文参考文章

中英文混合的格式化问题解决方案

1.前面学习了字符串的格式化,后来发现涉及到汉字对齐时,显示效果不太友好,所以网上学习了一番,特补充此篇笔记,解决中文,及中英文混合时对格式化对齐问题
2.针对文章中所讲述方法,本人试了几种情况,目前格式显示都正常。如果各位读者使用以下方法均无法达到理想效果或有更好都方法实现中英文对齐问题的,欢迎在评论区提出或补充,共同学习新的内容,感谢!

  1. format格式化中“:“后面和 < > ^ 前面 跟一个符合或字母,可以被填充在输出内容中,不写时默认填充英文空格。适用于纯英文格式的对齐
a = {'aa':122,'bb':222222}
for key,value in a.items():
    # 默认填充
    print('{key:>10}:{value}'.format(key=key,value=value))
for key,value in a.items():
    # 指定填充内容(-)
    print('{key:->10}:{value}'.format(key=key,value=value))
# 执行结果
        aa:122
        bb:222222
--------aa:122
--------bb:222222
  1. 汉字在格式格式话中计算时是按1个计算的(可以打印下len('我')看下),但实际输出时占位为2,当未达到指定长度时,默认填充英文空格,中英文空格的长度不一样,所以输出后没有对齐。chr(12288)代表中文格式的空格,用chr(12288)代替默认空格进行填充,最终输出就是对齐的了。适用于纯中文格式的对齐

此处说的中英文应该类似于全角和半角

# 举例说明
# 总长度设置为:5
# 5-len(a) = 4,需要补充4个空格(默认英文空格占位为1),a打印出来占位2个,输出后总占位=4+2=6
# 5-len(b) = 3,需要补充3个空格(默认英文空格占位为1),b打印出来占位4个,输出后总占位=3+4=7
a = '我'
b = '我们'
print(f'{a:<5};')
print(f'{b:<5};')
# 执行结果
我    ;
我们   ;
a = {'周日':122,'星期一':222222}
# 默认格式
print('默认格式:中文未对齐...')
for key,value in a.items():
    print(f'{key:<5}:{value}') 
print()
# 正确方法01
print('正确方法01......')
for key,value in a.items():
    print(f'{key:{chr(12288)}<5}:{value}') 
for key,value in a.items():
    print('{0:{2}<5}:{1}'.format(key,value,chr(12288)))
# 正确方法02
print('正确方法02........')
for key,value in a.items():
    print(f'{key:\u3000<5}:{value}')
# 执行结果
默认格式:中文未对齐...
周日   :122
星期一  :222222

正确方法01......
周日   :122
星期一  :222222
周日   :122
星期一  :222222
正确方法02........
周日   :122
星期一  :222222

  1. 以上方法仅使用于纯中文(英文),涉及到中英文结合就又不齐了,所以针对每个变量动态设置长度的方法解决中英文混合对齐的问题:
    我们设定一个总长度a,然后计算每一个传入的值的长度b,a和b结合计算出一个动态的长度c,然后把c传到格式化中,此时输出的格式会有0.5到1个字符的偏差,网上分析有可能是等宽字体的缘故(具体不详),所以加上一个制表符\t,这样输出的就是我们想要的效果了。适用于中英文混合格式的对齐

你可能感兴趣的:(Python学习05-中英文字体格式化补充)