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

Python中使用DictReader解析CSV通过用户输入筛选数据的代码排查

问题背景

需要实现基础Python脚本,接收用户输入的年龄,从CSV格式的数据库中筛选出对应年龄的人员姓名,现有代码运行后无法返回预期结果。
原有代码如下:

import csv

from encodings import utf_8
from csv import DictReader
from multiprocessing import Value
from typing import Dict
with open('Book.csv', newline='', ) as file :
    reader= DictReader(file)
  
    for row in reader :
     print(row)
    
  

    ask_age=(input("enterage:"))
    
    for row in reader :
     for key,val in row.items : 
        if ask_age==str in row.items['Age',str] is True : 
         print(row.items['Name',str])

测试用CSV样例如下:

Age,Name,Sex
10,brian,male
30,amilia,female
40,raylie,female 
原有代码错误点
  • 存在大量冗余导入:utf_8、Value、Dict三个导入的模块/类在代码中完全没有使用,属于无效代码。
  • 迭代器耗尽问题:DictReader是单向迭代的对象,第一次用for row in reader遍历打印所有行之后,读取指针已经走到文件末尾,后续第二次遍历reader时读不到任何数据。
  • 存在多处语法错误:
    • row.items是字典的方法,调用必须加括号写成row.items()才能拿到键值对,直接写row.items无法获取实际内容
    • 字典取值的语法错误:字段值直接通过row[键名]获取即可,比如row['Age']取年龄字段,原有代码写的row.items['Age',str]、row.items['Name',str]是完全错误的写法,既调用了错误的对象,键的传参格式也不对
    • 判断逻辑写法错误:原有判断语句if ask_age==str in row.items['Age',str] is True不符合Python语法规则,筛选只需要判断用户输入值和当前行的Age字段值是否相等即可,不需要冗余的链式判断。
修正后可运行代码
import csv
from csv import DictReader

with open('Book.csv', newline='', encoding='utf-8') as file:
    reader = DictReader(file)
    # 先把所有行读取为列表存储,解决迭代器耗尽无法二次遍历的问题
    row_list = list(reader)
    # 打印全量数据方便核对
    for row in row_list:
        print(row)

    ask_age = input("enter age:")
    print("筛选结果:")
    for row in row_list:
        # 加strip()去除字段首尾可能存在的空格,避免匹配失败
        if row['Age'].strip() == ask_age.strip():
            print(row['Name'])
运行效果

使用提供的CSV样例测试时,运行脚本会先打印全量3条数据,输入30后会输出匹配到的姓名amilia,符合筛选需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.04 16:15:40