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

Python print格式化打印表格行尾换行导致排版错乱问题

二进制文件读取打印表格错位问题排查

问题表现

读取存储逗号分隔数据的二进制文件,手动通过字符串格式化输出对齐表格时,每行末尾的边框和最后一列内容会被挤到下一行,整体排版错位,即使给print()函数添加end=''参数,仍然存在换行错位、多余空行的问题,且作业要求不能使用tabulate等第三方表格库,只能通过原生字符串格式化实现。

根因分析

问题出在文件读取的行内容处理环节:

  • 以二进制模式rb遍历文件行时,每一行原始字节末尾本身就携带了换行符(Windows下可能是\r\n,类Unix系统下是\n)
  • 直接对decode后的字符串做逗号分割,最后一个字段position会自带末尾的换行符,相当于格式化后的字符串内部已经藏了一个换行,哪怕你给print设置end=''取消了print自带的末尾换行,这个藏在字段里的换行还是会触发换行,把行尾的表格边框挤到下一行
  • 最开始没加end=''的时候,藏在字段里的换行+print默认加的换行,就会打出两个连续换行,表现为行与行之间多出整行空行

修复方法

只需要在decode行内容后,先调用strip()清除首尾的空白、换行字符,再做字段拆分即可,同时可以去掉print里多余的end=''参数,用默认换行保证每行正常结束。

修复后的核心代码段:

def functionRetrieve():
    while True:
        filename = input("Please enter a binary file name:")
        try:
            # 检查文件时建议和后续读取模式保持一致,用rb模式
            open(filename + ".bin", 'rb')
        except FileNotFoundError:
            print("Wrong file name or file type")
        else:
            break
    filename = filename + ".bin"
    print("\033[4m|{:^24}|{:^24}|{:^14}|{:^14}|{:^14}|{:^14}|\033[0m".format("Last Name", "First Name", "Games Played", "Total Points", "Average", "Position"))
    with open(filename, 'rb') as textfile:
        for line in textfile:
            # 先decode再清除首尾换行、空白字符,再拆分字段
            line = line.decode('utf-8').strip()
            data = line.split(",")
            lastname = data[0]
            firstname = data[1]
            gamesplayed = data[2]
            totalpoints = data[3]
            average = data[4]
            position = data[5]
            # 去掉多余的end='',用默认换行即可
            print("|{:^24}|{:^24}|{:^14}|{:^14}|{:^14}|{:^14}|".format(lastname, firstname, gamesplayed, totalpoints, average, position))

补充说明:如果担心字段首尾存在多余空格影响对齐,也可以在拆分后对每个字段单独调用.strip()做清理,避免字段前后的空格占用格式化宽度导致对齐偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:18:22