python - 使用 Python 将文本格式化为表格形式

标签 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

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

最佳答案

您可以使用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

您可以调整它来添加或删除 float 周围的空格:

>>> 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 位小数。

关于python - 使用 Python 将文本格式化为表格形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18232657/

相关文章:

python - 将 map 列表保存到 csv pyspark

ios - 在 Swift 中将字符串拆分为数组?

c++ - 修改后的冒泡排序程序出错

python - 为什么在文件名末尾添加点会导致 python 认为该文件存在?

python - 如何从 Python 中重写的@classmethod 调用父类的@classmethod?

python - 进一步简化和缩短一个简单的分组算法

python - 围绕特定节点的图形集群节点

java - 如何将arraylist转换为双引号中所有项目的字符串数组

python-3.x - 通过 pandas 保留 Excel 下拉列表

python-3.x - 在 python3 中使用键盘模块时 Num Lock 按钮按下不起作用