You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python输出分号分隔值为表格时后续数据行对齐异常问题

成绩表格打印错位问题

问题表现

编写show_result()函数读取results.txt中存储的分号分隔成绩记录,计算三圈总成绩、平均成绩后以表格形式展示。运行代码后表头行显示正常,但其余数据行内容无法整齐对齐,暂未定位到问题诱因。

原有实现代码

def show_result():
'''prints the score list'''
file_exist()
print_whole_list = []
print("Results")
print("*"*41)
result = open("results.txt","r")
res = result.readlines()
print("Name:      Lap1:      Lap2:      Lap3:    In total:     Average:")
for i in res:
    temp_list = i.split(";")
    total = int(temp_list[1]) + int(temp_list[2]) + int(temp_list[3])
    average = int(total) / 3.0
    average = round(average, 2)
    temp_list.insert(4, total)
    temp_list.insert(5, average)
    print_whole_list.extend(temp_list)
for row in print_whole_list:
    print("{0:{width}}".format(row, width=10), end=' ')
result.close()

测试数据(results.txt存储内容)

Kembos;23;43;23;
Moses;42;51;43;
Ben;43;23;21;

实际运行错位效果

运行输出错位截图

问题根因

  • 核心逻辑错误:使用extend()将所有行的字段全部合并到了一维列表print_whole_list中,打印循环全程设置end=' '不输出换行,导致所有数据连续排在同一行,完全没有按行拆分。
  • 数据未做清洗:每行成绩末尾带分号,split(";")切割后会生成多余的空字符串元素,打印时空值会占用格式化宽度,导致列偏移。
  • 对齐规则不统一:表头是手动输入空格凑对齐,和内容使用的10字符固定宽度格式化规则不匹配,本身就存在宽度偏差。

修复后可运行代码

def show_result():
    '''prints the score list'''
    file_exist()
    print("Results")
    col_width = 12
    print("*" * col_width * 6)
    # 表头和内容使用完全一致的宽度格式化规则,避免手动敲空格的误差
    header = ["Name", "Lap1", "Lap2", "Lap3", "In total", "Average"]
    for title in header:
        print(f"{title:{col_width}}", end="")
    print()

    with open("results.txt", "r", encoding="utf-8") as f:
        for line in f:
            # 切割后过滤空值、换行符
            items = [i.strip() for i in line.split(";") if i.strip()]
            total = int(items[1]) + int(items[2]) + int(items[3])
            average = round(total / 3, 2)
            row = [items[0], items[1], items[2], items[3], total, average]
            # 打印当前行所有列
            for cell in row:
                print(f"{cell:{col_width}}", end="")
            print() # 每行打印完成后换行

修复说明

  • 废弃原来的一维列表存储逻辑,逐行读取、逐行计算、逐行打印,每打印完一行主动输出换行,保证行结构正确。
  • 切割每行数据时过滤掉空字符串、换行符等无效内容,避免无效字符占用列宽。
  • 表头和内容使用统一的固定列宽做格式化,不再手动敲空格凑对齐,从根源避免列宽不匹配问题。
  • 改用with上下文管理器处理文件,自动关闭文件,避免资源泄漏。

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:03:13