如何对齐Python输出 实现SQL查询结果打印为规整对齐表格
Python打印SQL查询结果实现表格对齐的方法
错位原因
当前使用\t制表符对齐的方式不稳定:制表符默认按固定间隔(通常是8个字符)补位,一旦某单元格内容长度超过或不足制表位间隔,就会出现列错位。
解决方案
方法1:原生字符串格式化手动指定宽度(无需第三方依赖)
直接通过f-string的格式语法指定每列对齐方式和宽度,适合简单场景:
cursor.execute("SELECT * FROM game_log") data = cursor.fetchall() # 定义表头和对应列的宽度,可根据实际数据调整 headers = ["Date&Time", "Name", "Word", "Turns Given", "Turns Used", "Results"] col_widths = [20, 15, 10, 12, 12, 10] # 打印表头 for header, width in zip(headers, col_widths): print(f"{header:<{width}}", end="") print() # 打印分隔线 print("=" * sum(col_widths)) # 打印数据行 for item in data: for value, width in zip(item, col_widths): print(f"{str(value):<{width}}", end="") print()
格式说明:<代表左对齐,>代表右对齐,后面的数字为列的固定宽度,所有值先转成字符串避免数字类型报错。
方法2:动态计算列宽适配内容(无需第三方依赖)
如果不想手动指定宽度,可以自动计算每列的最长内容长度作为列宽,适配所有数据:
cursor.execute("SELECT * FROM game_log") data = cursor.fetchall() headers = ["Date&Time", "Name", "Word", "Turns Given", "Turns Used", "Results"] # 合并表头和所有数据,统一转成字符串后计算每列最大宽度,加2作为边距 all_rows = [headers] + [list(map(str, row)) for row in data] col_widths = [max(len(cell) for cell in col) + 2 for col in zip(*all_rows)] # 打印表头 for header, width in zip(headers, col_widths): print(f"{header:<{width}}", end="") print() print("-" * sum(col_widths)) # 打印数据 for row in data: row_str = list(map(str, row)) for cell, width in zip(row_str, col_widths): print(f"{cell:<{width}}", end="") print()
方法3:使用第三方库自动生成对齐表格
如果可以安装第三方库,用tabulate可以一键生成多种格式的对齐表格,无需手动调整格式:
- 先安装库:
pip install tabulate - 代码示例:
from tabulate import tabulate cursor.execute("SELECT * FROM game_log") data = cursor.fetchall() headers = ["Date&Time", "Name", "Word", "Turns Given", "Turns Used", "Results"] # tablefmt可选grid、pipe、plain等多种格式,可自行调整 print(tabulate(data, headers=headers, tablefmt="grid"))
内容的提问来源于stack exchange,提问作者Kalana Chandrasekara
相关产品推荐
相关产品推荐

