如何左对齐固定宽度的字符串?(How to left align a fixed width str

2019-06-18 10:30发布

我只是想固定文本的宽度列,但琴弦都填充权,而不是离开!?

 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

Answer 1:

您可以使用前缀与尺寸要求-左对齐:

sys.stdout.write("%-6s %-50s %-25s\n" % (code, name, industry))


Answer 2:

这个版本使用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

此前有在将来的语言中取出约%操作的文档的声明。 这种说法已经从文档删除 。



Answer 3:

sys.stdout.write("%-6s %-50s %-25s\n" % (code, name, industry))

在一个侧面说明,你可以与宽度可变*-s

>>> d = "%-*s%-*s"%(25,"apple",30,"something")
>>> d
'apple                    something                     '


Answer 4:

使用-50%而不是+50%他们将被排列到左..



Answer 5:

我绝对喜欢的format方法的更多,因为它是非常灵活的,可以通过定义很容易地扩展到您的自定义类__format__strrepr表示。 为了保持简单起见,我使用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.........'

高级例子

如果你有你的自定义类,你可以定义它的strrepr声明如下:

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版



Answer 6:

在我的python脚本这一个工作:

print "\t%-5s %-10s %-10s %-10s %-10s %-10s %-20s"  % (thread[0],thread[1],thread[2],thread[3],thread[4],thread[5],thread[6])


Answer 7:

随着在Python 3.6的新的和流行的F-字符串 ,这里是我们如何左对齐说有16个填充长度的字符串:

str = "Stack Overflow"
print(f"{str:<16}..")
Stack Overflow  ..

如果你有可变填充长度:

k = 20
print(f"{str:<{k}}..")
Stack Overflow      .. 

F-字符串是更具有可读性。



Answer 8:

稍微更可读的替代解决方案:
sys.stdout.write(code.ljust(5) + name.ljust(20) + industry)

需要注意的是ljust(#ofchars)使用固定宽度的字符和不动态调整像其他的解决方案。



文章来源: How to left align a fixed width string?