如何设置BeautifulTable的单元格宽度?

时间:2018-03-23 16:44:01

标签: python python-beautifultable

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

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

4 个答案:

答案 0 :(得分:3)

来自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:项目被剥离以适合其列并附加...(省略号)。

答案 1 :(得分:2)

对于v0.8.0,对于docschange log,可以通过设置/proc/net/arp属性来控制列宽:

column_widths

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

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

max_table_width

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

答案 2 :(得分:1)

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

table.columns.width = 30

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

如果表中包含动态数据,最好将maxwidth从默认的80增加:

table = BeautifulTable(maxwidth=120)

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

json.dumps(data, indent=2)

答案 3 :(得分:1)

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

GET http://.../[object%20File] 404 (Not Found)

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

来自官方release notes

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