在使用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裏面的順序,而“:” 後面的內容表示填充內容,當長度不夠時將自動填充