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

如何实现根据用户输入提取CSV数据集对应菜品行信息?

解决Python读取indian_food.csv并查询菜品信息的问题

你的代码存在多个关键问题,导致无法正确获取目标行数据,以下是修正后的完整实现:

修正后的代码

import csv

def read_dish():
    # 用上下文管理器读取csv,自动处理文件关闭
    with open('indian_food.csv', 'r', encoding='utf-8') as myfile:
        # 将csv解析为字典列表,每行对应一个菜品的字典
        dish_list = list(csv.DictReader(myfile))
    
    user_input = input('请输入菜品名称或其索引:\n').strip()
    
    target_row = None
    # 处理输入为索引的情况
    if user_input.isdigit():
        index = int(user_input)
        if 0 <= index < len(dish_list):
            target_row = dish_list[index]
        else:
            print(f'索引超出范围,数据集共有{len(dish_list)}条记录,索引范围0-{len(dish_list)-1}')
    # 处理输入为菜品名称的情况
    else:
        for row in dish_list:
            if row['dish name'].strip().lower() == user_input.lower():
                target_row = row
                break
        if not target_row:
            print(f'未找到名为"{user_input}"的菜品')
    
    # 找到目标行后格式化输出
    if target_row:
        # 处理数据集中的空值(如NaN、-1)
        state = target_row['state'] if target_row['state'] != 'NaN' else '未知地区'
        region = target_row['region'] if target_row['region'] != 'NaN' else '未知区域'
        cook_time = f"{target_row['cook_time']}分钟" if target_row['cook_time'] != '-1' else '未知时长'
        
        output = (f"{target_row['dish name']} is made of {target_row['ingredients']}, and is a {target_row['diet']} dish. "
                  f"It takes {cook_time} to cook. It is a {target_row['flavor_profile']} {target_row['course']} "
                  f"from the state of {state}, which is the {region} region of India.")
        print(output)

# 调用函数
read_dish()

关键修正点说明

  • CSV解析优化:使用csv.DictReader将每行数据转为字典,可直接通过列名(如row['dish name'])访问字段,解决原代码无法通过列名取值的问题。
  • 输入分支处理:区分用户输入的是数字索引还是字符串菜品名,分别实现匹配逻辑,覆盖需求中的两种查询方式。
  • 文件资源管理:用with语句打开文件,自动完成文件关闭,避免资源泄漏。
  • 异常与空值处理:增加索引越界、菜品不存在的提示,同时处理数据集中的NaN和-1空值,避免输出异常内容。
  • 输出格式修复:调整字符串拼接的语法,补充made of后的空格,让输出完全匹配示例格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:15:33