【问题标题】:How to set cell width size for BeautifulTable?如何为 BeautifulTable 设置单元格宽度大小?
【发布时间】:2018-09-02 10:10:00
【问题描述】:

我正在使用 python 模块BeautifulTable 向控制台发出表格。它包装了一些标题和内容,我想设置单元格宽度,所以它不会这样做。

我尝试通过table.column_widths(根据文档)设置宽度,但这似乎没有任何效果。

【问题讨论】:

    标签: python terminal python-beautifultable


    【解决方案1】:

    您可以使用table.columns.width 指定宽度,例如

    table.columns.width = 30
    

    table.columns.width = [20, 30, 40]
    

    如果表中包含动态数据,最好在默认80的基础上增加maxwidth

    table = BeautifulTable(maxwidth=120)
    

    您也可以在将数据放入列之前自行将数据包装成所需的宽度。 textwrap stdlib 模块可能对此有用。对于 JSON 数据,使用json.dumps() 进行漂亮打印可能会有所帮助,例如:

    json.dumps(data, indent=2)
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 BeautifulTable 1.0.0,您的语法如下:

      table.columns.width = [12,5,8,10,6,33]
      print(table)
      

      而旧语法 table.column_widths = [12,5,8,10,6,33] 在调用 print(table) 时往往会被自动覆盖。

      来自官方release notes

      BeautifulTable.columns.width 的更新行为(之前的 BeautifulTable.column_widths)。默认情况下,它不再覆盖用户指定的宽度。您可以通过将其设置为“自动”将其重置为默认值

      【讨论】:

        【解决方案3】:

        根据 v0.8.0 的 docschange log,可以通过设置 column_widths 属性来控制列宽:

        >>> table.column_widths = 5
        >>> print(table.column_widths)
        PositiveIntegerMetaData<5, 5, 5, 5, 5, 5, 5>
        
        >>> table.column_widths = [10, 20, 5, 7, 10, 10, 5]
        >>> print(table.column_widths)
        PositiveIntegerMetaData<10, 20, 5, 7, 10, 10, 5>
        

        请注意,最近的更改日志还说它放弃了对 Python v3.3 的支持 我只在 Python v3.7.5 中对此进行了测试,一旦再次打印表格,这些值就会被覆盖。

        如果您使用的是 v3.3+ 并且您不想截断或包装您的标题/字段,那么我发现的唯一“解决方法”是将 max_table_width 设置为足够大的值容纳所有行内容 + 填充 + 边框:

        >>> table.max_table_width = 150
        

        当然,这有其明显的局限性。

        【讨论】:

          【解决方案4】:

          来自docs

          column_widths

          获取/设置表格列的宽度。

          列的宽度指定一列可以包含的最大字符数。较大的字符根据width_exceed_policy的值进行处理。

          因此 column_widths 只处理一列中的最大字符数。为了处理溢出的文本 width_exceed_policy 必须使用。

          table.width_exceed_policy = BeautifulTable.WEP_ELLIPSIS
          

          从文档中它可以是以下之一:

          1. BeautifulTable.WEP_WRAP :一个项目被包裹,所以每一行都适合它的列宽。
          2. BeautifulTable.WEP_STRIP :一个项目被剥离以适应它的列。
          3. BeautifulTable.WEP_ELLIPSIS :一个项目被剥离以适应它的列并附加…(省略号)。

          【讨论】:

            猜你喜欢
            • 2019-01-01
            • 2023-03-23
            • 2019-12-09
            • 1970-01-01
            • 2018-12-13
            • 2013-03-23
            • 1970-01-01
            • 2019-07-05
            • 1970-01-01
            相关资源
            最近更新 更多