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

