0

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

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

4

4 回答 4

2

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

table.columns.width = 30

或者

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

如果表包含动态数据,最好maxwidth从默认值增加80

table = BeautifulTable(maxwidth=120)

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

json.dumps(data, indent=2)
于 2020-02-26T17:01:23.997 回答
2

文档

列宽

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

列的宽度指定一列可以包含的最大字符数。较大的字符根据 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:一个项目被剥离以适应它的列并附加...(省略号)。
于 2018-03-26T10:03:33.493 回答
1

根据v0.8.0的文档更改日志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

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

于 2019-12-19T16:59:50.637 回答
1

如果你使用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)

来自官方发布说明

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

于 2020-07-23T09:30:55.000 回答