Python的print函数输出制表符’\t’有时候会出现因为字符串长度问题,导致制表符无法使用’\t’制表符对齐输出。
解决方案1
在Python中可以通过%s控制字符串长度输出使其格式化对齐输出:
- %-10s,可以实现字符串左对齐输出,间隔10个字符
- %+20s,可以实现字符串右对齐输出,间隔20个字符
示例代码片段1(右对齐):
name = ['alice', 'bob', 'cindy', 'david']
age = [12, 13, 15, 17]
score = [89, 98, 90, 69]
for item in ['name', 'age', 'score']:
print('%+10s\t' % item, end='')
print()
for i in range(len(name)):
print('%+10s\t%+10s\t%+10s\t' % (name[i], age[i], score[i]))
输出如下:
name age score
alice 12 89
bob 13 98
cindy 15 90
david 17 69
示例代码片段2(左对齐):
name = ['alice', 'bob', 'cindy', 'david']
age = [12, 13, 15, 17]
score = [89, 98, 90, 69]
for item in ['name', 'age', 'score']:
print('%-10s\t' % item, end='')
print()
for i in range(len(name)):
print('%-10s\t%-10s\t%-10s\t' % (name[i], age[i], score[i]))
输出如下:
name age score
alice 12 89
bob 13 98
cindy 15 90
david 17 69
解决方案2
例如,有一个字典如下:
myDict = {
'name': 'python',
'url': 'www.python.com',
'address': 'China',
'isNonProfit': 'true',
}
想要获得对齐的输出,可以这样做:
1、首先获取字典的最大值max(map(len, dic.keys()))
2、然后使用Str.rjust() 右对齐
或者Str.ljust() 左对齐
或者Str.center() 居中输出。
"""
string.ljust(width) 返回一个原字符串左对齐,并使用(英文)空格填空至长度width的新字符串
string.rjust(width) 返回一个原字符串右对齐,并使用(英文)空格填空至长度width的新字符串
string.center(width) 返回一个原字符串居中,并使用(英文)空格填空至长度width的新字符串
"""
示例代码如下:
>>> myDict = {
... 'name': 'python',
... 'url': 'www.python.com',
... 'address': 'China',
... 'isNonProfit': 'true',
... }
>>>
>>> d = max(map(len, myDict.keys()))
>>>
>>> for k in myDict:
... print(k.ljust(d), ':', myDict[k])
...
name : python
url : www.python.com
address : China
isNonProfit : true
>>> for k in myDict:
... print(k.rjust(d), ':', myDict[k])
...
name : python
url : www.python.com
address : China
isNonProfit : true
>>> for k in myDict:
... print(k.center(d), ':', myDict[k])
...
name : python
url : www.python.com
address : China
isNonProfit : true
关于Str.ljust()、Str.rjust()、Str.center()还有这样的用法:
>>> s = 'bleach'
>>> s.ljust(10,'!')
'bleach!!!!'
>>> s.rjust(10,'!')
'!!!!bleach'
>>> s.center(10,'!')
'!!bleach!!'
解决方案3
:^ 表示居中对齐
:< 表示居左对齐
:> 表示居右对齐
示例代码如下:
>>> print('{0:<10}|{1:>10}'.format('naruto', 'bleach'))
naruto | bleach
>>> print('{0:>10}|{1:<10}'.format('naruto', 'bleach'))
naruto|bleach
>>> print('{0:^10}|{1:^10}'.format('naruto', 'bleach'))
> naruto | bleach
END
参考文献
Python制表符\t无法对齐问题
python怎么右对齐
python基础-文本对齐(居中,左对齐,右对齐)