我正在使用 python 模块BeautifulTable
向控制台发出一个表。它包装了一些标题和内容,我想设置单元格宽度,所以它不会这样做。
我尝试通过table.column_widths
(根据文档)设置宽度,但这似乎没有任何效果。
我正在使用 python 模块BeautifulTable
向控制台发出一个表。它包装了一些标题和内容,我想设置单元格宽度,所以它不会这样做。
我尝试通过table.column_widths
(根据文档)设置宽度,但这似乎没有任何效果。
您可以使用 指定宽度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)
从文档:
列宽
获取/设置表格列的宽度。
列的宽度指定一列可以包含的最大字符数。较大的字符根据 width_exceed_policy 的值进行处理。
因此 column_widths 只处理一列中的最大字符数。必须使用处理溢出文本width_exceed_policy
。
table.width_exceed_policy = BeautifulTable.WEP_ELLIPSIS
从文档中它可以是以下之一:
BeautifulTable.WEP_WRAP
:一个项目被包裹,所以每一行都适合它的列宽。BeautifulTable.WEP_STRIP
:一个项目被剥离以适应它的列。BeautifulTable.WEP_ELLIPSIS
:一个项目被剥离以适应它的列并附加...(省略号)。根据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
当然,这有其明显的局限性。
如果你使用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)的行为。默认情况下,它不再覆盖用户指定的宽度。您可以通过将其设置为“自动”将其重置为默认值