我只想要固定宽度的文字列,但字符串都是右边填充,而不是左边!!?
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
答案 0 :(得分:102)
您可以使用-
为大小要求添加前缀左对齐:
sys.stdout.write("%-6s %-50s %-25s\n" % (code, name, industry))
答案 1 :(得分:41)
此版本使用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))
<强>更新强>
之前在文档中有一条关于将来会从该语言中删除%运算符的声明。该声明为removed from the docs。
答案 2 :(得分:25)
sys.stdout.write("%-6s %-50s %-25s\n" % (code, name, industry))
在旁注上,您可以使用*-s
>>> d = "%-*s%-*s"%(25,"apple",30,"something")
>>> d
'apple something '
答案 3 :(得分:9)
使用-50%
代替+50%
他们将与左边对齐..
答案 4 :(得分:7)
我绝对更喜欢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
(repr)来告诉python调用那些定义的方法。如果没有定义,Python默认为__format__
,也可以覆盖。
x = foo()
print "{0!r:<10}".format(x) #'...::12::..'
print "{0!s:<10}".format(x) #'...::4::..'
来源:Python Essential Reference,David M. Beazley,第4版
答案 5 :(得分: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])
答案 6 :(得分:4)
使用 Python 3.6 中新的流行的 f-strings ,这是我们将具有16个填充长度的字符串左对齐的方法:
str = "Stack Overflow"
print(f"{str:<16}..")
Stack Overflow ..
如果填充长度可变:
k = 20
print(f"{str:<{k}}..")
Stack Overflow ..
f字符串更具可读性。
答案 7 :(得分:3)
稍微更易读的替代解决方案:
sys.stdout.write(code.ljust(5) + name.ljust(20) + industry)
请注意,ljust(#ofchars)
使用固定宽度字符,并且不像其他解决方案那样动态调整。