使用Python以表格形式格式化文本

时间:2013-08-14 13:09:50

标签: python string python-3.x format

propertiesTextBlock = """
    Basic Properties
    ----------------
    - nodes (n)         {n}
    - edges (m)         {m}
    - min. degree           {minDeg}
    - max. degree           {maxDeg}
    - isolated nodes        {isolates}
    - self-loops            {loops}
    - density           {dens:10.6f}
"""

使用string.format插入了几个数据项。输出到控制台然后看起来像:

Basic Properties
----------------
- nodes (n)         10680
- edges (m)         24316
- min. degree           1
- max. degree           205
- isolated nodes        0
- self-loops            0
- density             0.000426

不完美,因为我需要在文本块中手动插入恰当数量的选项卡。另外,如果我想以不同方式对齐数字(例如右对齐所有内容,在.处对齐...),该怎么办? 有没有一种简单的方法可以确保这个表看起来不错?

2 个答案:

答案 0 :(得分:2)

您可以使用format mini language指定路线:

>>> print '- nodes (n) {n:>20}\n- edges (m) {m:>20}'.format(n=1234, m=234)
- nodes (n)                 1234
- edges (m)                  234

>20格式规范将字段宽度设置为20个字符,并右对齐该字段中的值。

支持小数点对齐。您可以 指定动态字段宽度:

>>> print '- nodes (n) {n:>{width}}'.format(n=123, width=5)
- nodes (n)   123
>>> print '- nodes (n) {n:>{width}}'.format(n=123, width=10)
- nodes (n)        123

您可以调整以添加或删除浮点数周围的空格:

>>> from math import log10
>>> print '- density {density:>{width}.6f}'.format(density=density, width=10-int(log10(int(density))))
- density  0.000426
>>> density = 10.000426
>>> print '- density {density:>{width}.6f}'.format(density=density, width=10-int(log10(int(density))))
- density 10.000426

此处调整字段宽度以根据整个值将占用多少空间来向左或向右移动小数点。请注意,字段宽度是宽度,因此包括小数点和6位小数。

答案 1 :(得分:1)

正确的答案可能是使用prettytabletabulate

如果您希望使用普通旧格式,则可以控制字段宽度:

>>> print "node:{0:16}".format(10680,);
node:           10680
#    ^^^^^^^^^^^^^^^^ 
#      16 characters

对于 float 值,您可以对齐小数点:

>>> print "node:{0:16.2f}".format(10680.); \
... print "node:{0:16.2f}".format(10.5)
... print "node:{0:16.2f}".format(123.456)
node:        10680.00
node:           10.50
node:          123.46
#    ^^^^^^^^^^^^^^^^ 
#      16 characters

以下是“格式迷你语言”的正式说明:http://docs.python.org/2/library/string.html#formatstrings