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

Python CSV读取器:如何根据用户输入筛选指定行?

问题解决方法

你的代码核心问题是把整个行(列表对象)和输入的字符串直接比较了:row是csv.reader返回的列表(比如['1', 'A600', 'aluminium']),而station是用户输入的字符串(比如'1'),两者类型和内容完全不匹配,所以不会触发打印逻辑。

下面是针对不同CSV数据格式的修正方案:

方案1:CSV中station是字符串类型(如单元格内容为"1")

假设你的CSV结构是:第一列是station值,第二列是A600这类标识,第三列是材质信息,代码可以这么改:

import csv

station = input("Station... ")

with open('data.csv', 'r') as f:
    reader = csv.reader(f)
    # 如果CSV有表头,取消下面这行注释跳过表头
    # next(reader)
    for row in reader:
        # 只比较行的第一列和输入的station值
        if row[0] == station:
            # 打印你需要的第二、第三列内容
            print(row[1], row[2])
            # 找到匹配项后直接退出循环,避免多余遍历
            break
    else:
        # 循环正常结束说明没找到匹配的station
        print(f"Station {station} 未找到")

方案2:CSV中station是数字类型(如单元格内容为1)

如果CSV里的station是纯数字,需要把输入值和行数据都转为整数再比较,同时处理用户输入非数字的异常:

import csv

station_input = input("Station... ")
# 尝试把输入转为整数,处理无效输入
try:
    station_num = int(station_input)
except ValueError:
    print("请输入有效的数字station值")
    exit()

with open('data.csv', 'r') as f:
    reader = csv.reader(f)
    # next(reader)  # 有表头则打开这行
    for row in reader:
        try:
            row_station = int(row[0])
        except ValueError:
            continue  # 跳过格式错误的行
        if row_station == station_num:
            print(row[1], row[2])
            break
    else:
        print(f"Station {station_input} 未找到")

关键修改说明

  1. 不再直接比较整个row,而是取行的指定列元素(这里是row[0])和输入值对比
  2. 打印时明确指定需要的列(row[1]和row[2]),而不是输出整个行
  3. 加入break减少不必要的循环遍历,同时增加了未找到匹配项的提示
  4. 针对数字类型的station,处理了输入和行数据的类型转换及异常情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:15:37