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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:36:01