python字符串format中英文空格對(duì)齊問(wèn)題

python2.6之后format通過(guò){}和:來(lái)代替%

format函數(shù)格式化字符串的用法

參考文檔: https://blog.csdn.net/NightCharm/article/details/62041068

print('{0},{1}'.format('zhangk', 32))                                       #zhangk,32
print('{},{},{}'.format('zhangk', 'boy', 32))                               #zhangk,boy,32
print('{name},{sex},{age}'.format(age=32, sex='male', name='zhangk'))       #zhangk,male,32




#  豐富的格式限定符(語(yǔ)法是{}中帶:號(hào)):      "

## 填充與對(duì)齊,填充常跟對(duì)齊一起使用
"""
:號(hào)后面帶填充的字符,只能是一個(gè)字符,不指定的話默認(rèn)是用空格填充
^ < >分別是居中、左對(duì)齊、右對(duì)齊,后面帶寬度
"""
print('{:>8}'.format('zhang'))      #   zhang ,默認(rèn)空格填充
print('{:0>8}'.format('zhang'))     #000zhang
print('{:a<8}'.format('zhang'))     #zhangaaa
print('{:p^10}'.format('zhang'))    #ppzhangppp


# 精度與類型f
"""精度與類型f, 精度常跟類型f一起使用"""
print('{:.2f}'.format(31.31412))    #31.31

# 其他類型
"""主要就是進(jìn)制,b ,d , o, x分別是二進(jìn)制、十進(jìn)制、八進(jìn)制、十六進(jìn)制"""
print('{:b}'.format(15))   #1111
print('{:d}'.format(15))   #15
print('{:o}'.format(15))   #17
print('{:x}'.format(15))   #f


# 用逗號(hào)還能用來(lái)做金額的千位分隔符
print('{:,}'.format(123456789)) #123,456,789


格式輸出對(duì)齊問(wèn)題

參考文檔: https://blog.csdn.net/qq_36063677/article/details/77854124

>>> info = [{'name': '你好你好你好', 'age': 26}, {'name': '小李', 'age': 26}, {'name': '小王', 'age': 26}]
>>>
>>> for i in info:
...    print('{:^12}{:^3}'.format(i.get('name'), i.get('age')))
...
   你好你好你好   26
     小李     26
     小王     26
>>>
>>>
>>>
>>> tplt = '{0:{2}^12}{1:^3}'
>>> for i in info:
...    print(tplt.format(i.get('name'), i.get('age'), chr(12288)))
...
   你好你好你好   26
     小李     26
     小王     26
>>>

原因:當(dāng)中文字符寬度不夠時(shí),采用西文字符填充;中西文字符占用寬度不同
解決方案: 采用中文字符空格填充,(utf-8編碼)chr(12288)
{0:{2}^12}的意思為打印字符串變量時(shí),使用format()中第二個(gè)變量類進(jìn)行填充,即使用中文空格進(jìn)行填充



注意:中英文混合的字符串仍然無(wú)法通過(guò)這個(gè)方式處理

>>> tplt = '{0:{2}^12}{1:^3}'
>>> for i in info:
...   print(tplt.format(i.get('name'), i.get('age'), chr(12288)))
...
   你好你好你好   26
     小李     26
     小王     26
    ccc     26
>>>
>>> print("{:p^6}".format('你好'))   #從這可以看出中英文混合后的寬帶是無(wú)法預(yù)知的
pp你好pp
>>>

因?yàn)橹形魑淖址加脤挾炔煌约词故褂弥形目崭襁M(jìn)行填充也不是齊的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容