如何基于输入从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
相关产品推荐
相关产品推荐

