Python读取CSV文件输出对齐问题:制表符分隔列错位如何解决?
问题原因
制表符\t的对齐逻辑为按固定步长(通常为4/8个字符)跳转制表位,当列内容长度超过单个制表位宽度时,后续制表位就会出现错位,无法实现多列规整对齐。
解决方案
使用Python f-string的固定宽度格式化功能,手动指定每列的对齐方式和宽度即可实现规整输出,以下是两种可选实现方案:
方案1:固定列宽(简单易用)
直接修改displayContents函数,为每列指定固定的左对齐宽度,宽度可根据实际内容长度调整:
def displayContents(name, dateofPurchase, numberofTickets,price): # < 表示左对齐,后面的数字为列的总占位宽度,可按需调整 print(f"{'Name':<25} {'Date of Purchase':<20} {'Number of Tickets':<20} {'Price':<10}") for counter in range(len(name)): print(f"{name[counter]:<25} {dateofPurchase[counter]:<20} {numberofTickets[counter]:<20} {price[counter]:<10}")
方案2:自动适配列宽(灵活通用)
提前计算每列内容的最大长度,自动适配列宽,不需要手动调整宽度,适配所有内容长度场景:
def displayContents(name, dateofPurchase, numberofTickets,price): # 计算每列最大宽度,取表头和内容的最长值,加2为预留边距 col1_width = max(max(len(n) for n in name), len("Name")) + 2 col2_width = max(max(len(d) for d in dateofPurchase), len("Date of Purchase")) + 2 col3_width = max(max(len(str(t)) for t in numberofTickets), len("Number of Tickets")) + 2 col4_width = max(max(len(str(p)) for p in price), len("Price")) + 2 # 输出表头 print(f"{'Name':<{col1_width}}{'Date of Purchase':<{col2_width}}{'Number of Tickets':<{col3_width}}{'Price':<{col4_width}}") # 逐行输出内容 for i in range(len(name)): print(f"{name[i]:<{col1_width}}{dateofPurchase[i]:<{col2_width}}{numberofTickets[i]:<{col3_width}}{price[i]:<{col4_width}}")
补充说明
如果需要生成带边框、分隔线的专业表格,可直接使用Python第三方库prettytable,无需手动处理宽度逻辑。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

