python中文字串居中/中文居中python/python漢字字串居中:手撕比方法好用
在做一個小的格式化輸出的時候出現了問題:無論怎麼排,漢字都無法很順利地被居中,尤其是漢字和英文或者數字在一起時,更是一團糟。
python有內建的字串方法str.center(x),可以讓字串以i的長度輸出並居中。
但是!
但是!
但是!
在計算字串長度時候預設是ascii的長度,也就是一個字元長度為1。
這顯然行不通,因為一箇中文佔據2長度!中文符號亦然。
所以你要是想讓 x=‘居中juzhong’ 這個字串居中,你用str.center(len(x))的時候,就不能達到目的,原因是 len(x)=9 而不是實際上的11,輸出的結果那自然是相當糟糕的。於是我寫了一個函式,可以讀取正確的字串長度:
def lenCN(n):
#遇到非英文,自動二倍長度。
n=list(n)
stl=0
for x in n :
if x in string.printable:
stl +=1
else :
stl+=2
return stl
這樣字串的正確長度就可以讀取了,但是這對於順利進行居中排版還是不夠的。正確的做法應該是:用這個函式讀取某項所有單位的實際長度(比如‘姓名’),求出其中最大值,(比如‘愛新覺羅狗蛋’,為12),再加上為了美觀考慮的一些空長度(隨意,比如4)。然後讓所有的姓名單位輸出時用 print(x.center(12+4))即可。
有的時候,這樣的輸出也依然無法做到居中(奇數偶數空格的問題)。
這個時候,可以使用我寫的這個小函式來完成。
def merg(x,y):
a=int((最大長度列表[專案名]-checkCN(當前項))/2)
b=int(((最大長度列表[專案名]-checkCN(當前項))/2)
if a+b != ((最大長度列表[專案名]-checkCN(當前項)))) :
b+=1
#防止出現奇數項的情況
return(a,b,)
def getmerg(x,y):
y=' '*merg(x,y)[0]+y+' '*merg(x,y)[1]
return y
一定可以達到目的。