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

使用Scanner读取CSV文件时遇NoSuchElementException且打印数据混乱

解决CSV数据打印格式混乱的问题

嘿,我明白你现在的困扰——解析完CSV数据后打印出来一团糟,完全看不出列的结构对吧?别担心,这是CSV输出时很常见的问题,毕竟原始的逗号分隔格式本来就没考虑可读性。我给你几个实用的解决办法,以Python为例(毕竟是处理CSV最常用的语言),你可以参考着调整:

方法一:手动计算列宽,格式化对齐

这个方法不需要额外装库,纯原生代码就能搞定,核心是先算出每列的最大宽度,再用字符串格式化让每个字段对齐。

步骤1:确保数据是规整的二维结构

假设你解析后的数据是这样的二维列表:

data = [
    ["Liverpool Lime Street", "P", "B", "D"],
    ["Edge Hill", "P", "-", "D"],
    ["Mossley Hill", "-", "-", "-"],
    ["West Allerton", "P", "-", "D"],
    ["Liverpool South Parkway", "-", "-", "D"],
    # ... 其他行数据
]

步骤2:清洗数据(可选但推荐)

你的CSV里有些字段带多余空格(比如"Hough Green "),先去掉字段前后的空白,避免列宽计算出错:

cleaned_data = [[item.strip() for item in row] for row in data]

步骤3:计算每列的最大宽度

遍历每一列,找出最长的字段长度:

column_widths = [max(len(str(item)) for item in column) for column in zip(*cleaned_data)]

步骤4:格式化打印

用字符串格式化把每行的字段按列宽对齐,还可以加分隔线让结构更清晰:

for idx, row in enumerate(cleaned_data):
    # 左对齐每个字段,填充到对应列宽
    formatted_row = " | ".join(f"{item:<{width}}" for item, width in zip(row, column_widths))
    print(formatted_row)
    # 第一行后打印分隔线
    if idx == 0:
        print("-+-".join("-" * width for width in column_widths))

输出效果会像这样:

Liverpool Lime Street | P | B | D
----------------------+---+---+---
Edge Hill             | P | - | D
Mossley Hill          | - | - | -
West Allerton         | P | - | D

方法二:用第三方库快速生成美观表格

如果不想写太多代码,用tabulate库可以一键生成各种格式的表格,非常省心。

步骤1:安装tabulate

pip install tabulate

步骤2:直接调用打印

把解析好的数据传入tabulate函数,选择你喜欢的表格格式:

from tabulate import tabulate

# 用simple格式(简洁的表格)
print(tabulate(cleaned_data, tablefmt="simple"))

# 如果想要Markdown格式的表格,选"pipe"
print(tabulate(cleaned_data, tablefmt="pipe"))

tablefmt还有很多可选值,比如grid(带边框的网格)、plain(无分隔线),你可以根据需求切换。

不管用哪种方法,核心都是让每列的宽度统一,这样打印出来的内容就整整齐齐啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:14:48