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
相关产品推荐
相关产品推荐

