Python遍历团队列表匹配CSV行提取数据的代码问题排查
问题分析与修复方案
原代码存在的问题
- 团队列表赋值逻辑错误:循环
for i in my_list: team_list = [i]会每次覆盖team_list,最终仅保留最后一个团队,完全没用到整个团队列表 - 条件判断逻辑错误:
row[3]是字符串类型(比如'team1'),拿它和列表team_list比较永远不会相等,应改为判断团队名是否在目标列表内 - 使用Python内置关键字
object作为变量名,易引发隐性冲突,建议替换为obj_id这类自定义名称 - 函数定义嵌套在文件打开的
with块内完全没必要,代码结构冗余绕弯 - 未跳过CSV表头行,会导致表头被误当作数据行处理
修复后的代码
import csv # 替换内置关键字object为obj_id,避免冲突 obj_id = input('Object ID: ') my_teams = ['team1', 'team2', 'team3', 'team4'] extracted_data = [] # 存储提取的信息,后续直接调用此变量即可 with open(latest_csv, 'r') as report: reader = csv.reader(report, delimiter=',') next(reader) # 跳过CSV表头行 for row in reader: # 检查团队名在目标列表中,且Object ID匹配 if row[3] in my_teams and row[14] == obj_id: # 提取需要的列:团队名、第4列、第5列、Object ID extracted_data.append([row[3], row[4], row[5], row[14]]) # 后续直接调用extracted_data即可,比如打印验证结果 print(extracted_data)
说明
- 直接用
my_teams作为目标团队集合,无需额外转换列表 - 用
next(reader)跳过表头,避免混入无效数据 - 提取的数据存放在全局变量
extracted_data中,后续任意位置都能直接调用 - 移除了不必要的嵌套函数,代码更简洁直观
示例:输入Object ID为1时,extracted_data会得到:[['team1', 'Denver', 'CO', '1'], ['team2', 'NY', 'NY', '1']]
内容的提问来源于stack exchange,提问作者dispatch
相关产品推荐
相关产品推荐

