我只是想固定文本的宽度列,但琴弦都填充权,而不是离开!?
sys.stdout.write("%6s %50s %25s\n" % (code, name, industry))
产生
BGA BEGA CHEESE LIMITED Food Beverage & Tobacco
BHP BHP BILLITON LIMITED Materials
BGL BIGAIR GROUP LIMITED Telecommunication Services
BGG BLACKGOLD INTERNATIONAL HOLDINGS LIMITED Energy
但我们要
BGA BEGA CHEESE LIMITED Food Beverage & Tobacco
BHP BHP BILLITON LIMITED Materials
BGL BIGAIR GROUP LIMITED Telecommunication Services
BGG BLACKGOLD INTERNATIONAL HOLDINGS LIMITED Energy
您可以使用前缀与尺寸要求-
左对齐:
sys.stdout.write("%-6s %-50s %-25s\n" % (code, name, industry))
这个版本使用str.format方法。
Python 2.7版及更高版本
sys.stdout.write("{:<7}{:<51}{:<25}\n".format(code, name, industry))
Python的2.6版本
sys.stdout.write("{0:<7}{1:<51}{2:<25}\n".format(code, name, industry))
UPDATE
此前有在将来的语言中取出约%操作的文档的声明。 这种说法已经从文档删除 。
sys.stdout.write("%-6s %-50s %-25s\n" % (code, name, industry))
在一个侧面说明,你可以与宽度可变*-s
>>> d = "%-*s%-*s"%(25,"apple",30,"something")
>>> d
'apple something '
我绝对喜欢的format
方法的更多,因为它是非常灵活的,可以通过定义很容易地扩展到您的自定义类__format__
或str
或repr
表示。 为了保持简单起见,我使用print
在以下实施例,其可以被替换sys.stdout.write
。
简单示例:对准/填充
#Justify / ALign (left, mid, right)
print("{0:<10}".format("Guido")) # 'Guido '
print("{0:>10}".format("Guido")) # ' Guido'
print("{0:^10}".format("Guido")) # ' Guido '
我们接下来可以添加到align
指定哪些是^
, <
和>
的填充字符用的任何其他字符来替换空间
print("{0:.^10}".format("Guido")) #..Guido...
多输入例子:对齐并填写许多输入
print("{0:.<20} {1:.>20} {2:.^20} ".format("Product", "Price", "Sum"))
#'Product............. ...............Price ........Sum.........'
高级例子
如果你有你的自定义类,你可以定义它的str
或repr
声明如下:
class foo(object):
def __str__(self):
return "...::4::.."
def __repr__(self):
return "...::12::.."
现在你可以使用!s
(STR)或!r
再版)告诉Python调用这些定义的方法。 如果什么都没有定义,Python的默认__format__
它也可被覆盖。 X = FOO()
print "{0!r:<10}".format(x) #'...::12::..'
print "{0!s:<10}".format(x) #'...::4::..'
来源:Python的重要参考,大卫·M·比兹利,第4版
在我的python脚本这一个工作:
print "\t%-5s %-10s %-10s %-10s %-10s %-10s %-20s" % (thread[0],thread[1],thread[2],thread[3],thread[4],thread[5],thread[6])
随着在Python 3.6的新的和流行的F-字符串 ,这里是我们如何左对齐说有16个填充长度的字符串:
str = "Stack Overflow"
print(f"{str:<16}..")
Stack Overflow ..
如果你有可变填充长度:
k = 20
print(f"{str:<{k}}..")
Stack Overflow ..
F-字符串是更具有可读性。
稍微更可读的替代解决方案:
sys.stdout.write(code.ljust(5) + name.ljust(20) + industry)
需要注意的是ljust(#ofchars)
使用固定宽度的字符和不动态调整像其他的解决方案。