使用tabulate+zip_longest遇headers参数错误,如何修正生成指定表格?
问题描述
使用Python结合tabulate库与itertools.zip_longest处理水果数据时触发错误:
TypeError at /controlepunt140 tabulate() got multiple values for argument 'headers'
移除tabulate后的原始数据格式如下:
16 Watermeloenen: 466 360 Appels: 688 6 Sinaasappels: 803 75 9 688 22 80 160 320 160 61
期望生成带header1、header2表头的规范表格:
header1 header2 ------- ------- 16 Watermeloenen: 466 360 Appels: 688 6 Sinaasappels: 803 75 9 688 22 80 160 320 160 61
修正方案
错误原因
出现multiple values for argument 'headers'通常是调用tabulate()时,同时通过位置参数和关键字参数传递了表头,或是传入的数据结构与表头参数逻辑冲突。
修正代码
以下是完整的可运行代码,包含数据预处理与正确的表格生成逻辑:
from tabulate import tabulate # 原始行数据 raw_lines = [ "16 Watermeloenen: 466", "360 Appels: 688", "6 Sinaasappels: 803", "75 ", "9 ", "688 ", "22 ", "80 ", "160 ", "320 ", "160 ", "61 " ] # 拆分每行数据,确保每行都有两个字段(空字段用空字符串填充) processed_rows = [] for line in raw_lines: stripped_line = line.strip() # 按第一个空格拆分,最多拆成2部分 parts = stripped_line.split(maxsplit=1) if len(parts) == 1: processed_rows.append((parts[0], "")) else: processed_rows.append((parts[0], parts[1])) # 正确调用tabulate生成表格 result_table = tabulate(processed_rows, headers=["header1", "header2"], tablefmt="simple") print(result_table)
关键说明
- 数据预处理:通过
split(maxsplit=1)拆分每行,确保每行都生成两个字段,避免后续表格生成时结构混乱;空字段用空字符串填充,匹配需求中的空白行效果。 - tabulate调用规范:仅通过关键字参数
headers传递表头列表,避免重复传参;指定tablefmt="simple"生成符合需求的简洁表格格式。 - 若你原本是用
zip_longest合并两个单列数据,需确保合并后的结果是二维列表/元组,且调用tabulate时只传一次表头参数,示例如下:from itertools import zip_longest col1 = ["16", "360", "6", "75", "9", "688", "22", "80", "160", "320", "160", "61"] col2 = ["Watermeloenen: 466", "Appels: 688", "Sinaasappels: 803"] + [""]*9 merged_rows = list(zip_longest(col1, col2, fillvalue="")) result_table = tabulate(merged_rows, headers=["header1", "header2"], tablefmt="simple")
内容的提问来源于stack exchange,提问作者mightycode Newton
相关产品推荐
相关产品推荐

