Python使用tabulate打印表格时数据按列输出而非按行输出的问题
问题原因
- 核心问题是传入
tabulate()的数据结构不符合函数要求:tabulate接收的表格数据必须是二维可迭代对象(即「行的集合」,集合内的每个元素代表一行,行内元素按顺序对应各列的值)。 - 你当前的代码在循环中每次取出单条
book记录直接传入,这是个一维结构;如果book是字符串类型,tabulate会遍历字符串的每个字符,把单个字符作为一行的元素逐列填充,最终就会出现你看到的文本逐字符拆分、按列排布、格式完全错乱的现象。
修复方案
根据你的输出需求二选一即可:
方案1:一次性输出所有书籍的完整表格(推荐,格式最整洁)
不需要写循环,直接把存储所有记录的二维列表books整体传入函数即可:from tabulate import tabulate # 注意确保books内的每条记录值顺序和表头顺序一一对应 # 正确的books结构示例: # books = [ # [1, "Python", "Jim", 2020, 1, "A-03"], # [2, "Java Guide", "Tom", 2019, 0, "B-12"] # ] print(tabulate(books, headers=["ID", "Title", "Author", "Pub_year", "available", "Shelf Place"]))方案2:逐行打印单条记录(适合每条记录间需要加自定义分隔、备注的场景)
循环时把单条book记录包裹在列表中,构造成[[单条记录的所有列值]]的二维单行结构再传入:from tabulate import tabulate for book in books: # 单条记录必须套一层[],转为二维结构 print(tabulate([book], headers=["ID", "Title", "Author", "Pub_year", "available", "Shelf Place"])) # 可按需添加每条记录后的分隔内容,例如 print("="*50)
补充提示:如果你的单条
book是字典结构,需要先按表头顺序把对应值提取为序列再传入,否则会出现列值和表头不匹配的问题。
内容的提问来源于stack exchange,提问作者James Demisse
相关产品推荐
相关产品推荐

