【问题标题】:Python Strings with Specific WIdth具有特定宽度的 Python 字符串
【发布时间】:2011-11-02 17:53:16
【问题描述】:

我在查找有关如何执行此操作的良好解释时遇到了一些麻烦,因此为我指出正确的方向将有助于解决以下问题。

我需要以漂亮的格式打印出标题以及数据,不幸的是发生了什么 如下图所示。

DeviceName   KB used   KB quota   KB hard limit   grace   
/media/Stuff        58384   5242880   0   none

为了做到这一点,我为标题建立了一个列表。

HEADER=['DeviceName', 'KB USED', . . .]

我需要打印的其他条目也是如此。 为了打印出上面我做了这样的事情

print "".join('%s'.rjust(5) %i for i in HEADER)

所以这显然不起作用,因为 rjust 只是在字符串右侧填充空格。有没有办法打印一个字符串,使其恰好占据一定的宽度,如果字符串的长度不足以适应宽度,那么只需用空格填充它?

附:我仅限于 python 2.4,这意味着我不能使用 python 2.7 中的格式。

【问题讨论】:

  • 关闭。事后您需要在字符串上运行rjust()str(i).rjust(5) 或已指出 "%5s" % i

标签: python string formatting python-2.4


【解决方案1】:

你可以使用'%*s':

HEADER = "DeviceName   |KB used|KB quota|KB hard limit| grace".split('|')
data = ["/media/Stuff", 58384, 5242880, 0, None]
print '|'.join(HEADER)
print '|'.join("%*s" % (width, val) for width, val in zip(map(len,HEADER), data))

输出

DeviceName   |KB used|KB quota|KB hard limit| grace
 /media/Stuff|  58384| 5242880|            0|  None

【讨论】:

    【解决方案2】:

    你想要反过来。 像这样怎么样:

    >>> "%-5s" % 'sss'
    'sss  '
    

    【讨论】:

      【解决方案3】:
       '%s'.rjust(5)
      

      将空格放入,假设文字 %s 是您的字符串。您将用另一个长度未知的字符串替换它,所以在替换之前您无法证明是正确的。

      但是,您不希望自己明确地.rjust() 一切,因为该功能已内置于替换引擎中。只需将字段宽度放在%s 之间即可。

      您可以通过测量标题中字符串的长度来动态构建格式字符串。格式化时使用%% 生成文字% 符号;因此,'%%%ds' % 10 变为 '%10s',这将产生 10 的字段宽度。

      因此,类似于:

      format_string = ' '.join('%%%ds' % len(h) for h in HEADER)
      print ' '.join(HEADER)
      for entry in data: print format_string % entry
      

      【讨论】:

      【解决方案4】:

      精确格式化字符串:

      print ' '.join("%5.5s" % s for s in HEADER)
      

      或者,对rjust 结果进行切片:

      print ' '.join(s.rjust(5)[:5] for s in HEADER)
      

      【讨论】:

        猜你喜欢
        • 2019-01-14
        • 1970-01-01
        • 2022-11-30
        • 2020-05-01
        • 2015-11-18
        • 2010-09-15
        • 2019-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多