python print對齊

在使用Python的內建函數print作英文輸出時,應用格式化輸出可以對齊得很好:

s1 = 'I am a long sentence.'
s2 = 'I\'m short.'
 
print ('%-30s%-20s' %(s1,s2)) #'%-30s' 含義是 左對齊,且佔用30個字符位 
print ('%-30s%-20s' %(s2,s1))

但當字符串包含中文時,卻發現它對齊得不是很好:

原因是這樣:在print中,函數爲了實現字符串對齊,會在未達到指定長度的字符串末尾添上空格補齊。但是,問題在這裏,它會填入ASCII碼爲20的space,也就是半角空格。它的長度等於每個字母或數字的寬度,但遠比漢字的寬度小,所以導致補足後的字符串長度仍然不同。

Python中使用str.format進行格式化輸出,format使用方法較多,這裏只說明其在填充與對齊上的使用方法:

填充與對齊

填充常跟對齊一起使用
^、<、>分別是居中、左對齊、右對齊,後面帶寬度
:號後面帶填充的字符,只能是一個字符,不指定的話默認是用空格填充

例如:

ulist = []
ulist.append([1,'清華大學','10'])
ulist.append([2,'中國科學技術大學','10'])
ulist.append([3,'復旦大學','10'])
for ul in ulist:
    print("{0:^6}\t{1:^10}\t{2:^6}".format(ul[0], ul[1], ul[2]))

其中print語句採用format格式化輸出{:^6}表示居中顯示,佔6個字符寬度,但是會發現下面輸出語句中並沒有對齊,原因是當中文字符串長度沒有達到指定字符串長度時,默認會採用西文空格代替,而西文空格和中文空格長度不同,故導致中英文混輸時不對齊了。

ulist = []
ulist.append([1,'清華大學','10'])
ulist.append([2,'中國科學技術大學','10'])
ulist.append([3,'復旦大學','10'])
for ul in ulist:
    print("{0:^6}\t{1:{3}^10}\t{2:^6}".format(ul[0], ul[1], ul[2], chr(12288)))

此時可以發現代碼輸出已經對齊了。
這裏說明一個問題{1:{3}^10},這個裏面1和3對應format裏面的順序,而“:” 後面的內容表示填充內容,當長度不夠時將自動填充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章