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

如何基于输入从CSV指定行的指定索引生成新列表?

解决CSV指定字段提取问题

嘿,我来帮你搞定这个问题!你的代码问题出在变量y的初始化位置不对,另外其实有更简洁的方法来提取目标字段。

问题分析

你把y = 2定义在了整个循环外面,第一次找到匹配的行后,y会一直递增到6,之后即使再找到其他匹配行,while y <=5的条件也不会满足,自然不会添加元素到res里。而且就算是第一次执行,这个while循环也有点冗余。

解决方案1:修复while循环逻辑

把y的初始化放到if判断内部,每次匹配到目标行时重置y的值:

import csv

res = []
number = input('Enter number to find\n')
csv_file = csv.reader(open('residence.csv', 'r'), delimiter=",")

for row in csv_file:
    if number == row[0]:
        y = 2  # 每次找到匹配行时重置y
        while y <= 5:
            res.append(row[y])
            y += 1
        print(res)

输入001后,就能得到预期结果:['Laura', 'Susan', 'Ernest', 'Toby']

解决方案2:用Python切片简化代码

其实完全不需要while循环,Python的列表切片可以直接提取索引2到5的元素(切片是左闭右开,所以row[2:6]就能获取索引2、3、4、5的元素):

import csv

number = input('Enter number to find\n')
csv_file = csv.reader(open('residence.csv', 'r'), delimiter=",")

for row in csv_file:
    if number == row[0]:
        res = row[2:6]
        print(res)

这样代码更简洁,运行结果和预期完全一致。

额外提示

如果你的CSV文件有表头(比如第一行是code,place,name1,name2,name3,name4),可以用csv.DictReader来按字段名提取,这样更直观,不需要记索引:

import csv

number = input('Enter number to find\n')
csv_file = csv.DictReader(open('residence.csv', 'r'), delimiter=",")

for row in csv_file:
    if number == row['code']:
        res = [row['name1'], row['name2'], row['name3'], row['name4']]
        print(res)

这种方法即使CSV的列顺序改变,代码也能正常工作,可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:03:34