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

CSV文件特定记录查询:学生项目多文件关联需求

嘿,你已经搞定了测验分数统计的核心部分,接下来要把最高分用户的详细信息从details.csv里拉出来整合到报告里对吧?我给你整理了两种实用的实现思路,都是Python里常用的方法:

方案1:用Python内置csv模块(轻量无依赖)

这种方法不需要额外安装库,适合小型数据集。先假设你的两个CSV文件结构大概是这样(你可以根据实际调整字段):

reportForFergusTwo.csv示例结构:

quiz_name,average_score,max_score,top_username
数学测验,82,95,li_ming
英语测验,78,92,zhang_hua

details.csv示例结构:

username,full_name,email,class
li_ming,李明,liming@school.com,初三(2)班
zhang_hua,张华,zhanghua@school.com,初三(1)班

接下来是代码实现,你可以把自己已有的找最高分用户的逻辑整合进来:

import csv

# 从报告文件获取最高分对应的用户名(替换成你已有的函数也可以)
def get_top_user(report_file):
    top_username = None
    highest_score = -1
    with open(report_file, 'r', encoding='utf-8', newline='') as f:
        reader = csv.DictReader(f)
        for row in reader:
            # 注意把分数转成数值类型,避免字符串比较出错
            current_score = float(row['max_score'])
            if current_score > highest_score:
                highest_score = current_score
                top_username = row['top_username']
    return top_username

# 根据用户名查找用户详细信息
def get_user_info(username, details_file):
    with open(details_file, 'r', encoding='utf-8', newline='') as f:
        reader = csv.DictReader(f)
        for row in reader:
            if row['username'] == username:
                # 返回整理好的用户详情字典
                return {
                    '全名': row['full_name'],
                    '邮箱': row['email'],
                    '班级': row['class']
                }
    return None  # 没找到用户时返回None

# 调用示例
report_path = 'reportForFergusTwo.csv'
details_path = 'details.csv'

target_user = get_top_user(report_path)
if target_user:
    user_details = get_user_info(target_user, details_path)
    if user_details:
        print(f"🎉 最高分用户详情:")
        print(f"用户名:{target_user}")
        for key, value in user_details.items():
            print(f"{key}:{value}")
    else:
        print(f"⚠️ 未找到用户 {target_user} 的详细信息")
else:
    print("⚠️ 报告文件中未找到有效的最高分用户数据")

方案2:用Pandas(高效处理大数据)

如果你的CSV文件数据量比较大,用Pandas会更简洁高效,不过需要先安装库:pip install pandas

代码示例:

import pandas as pd

# 读取两个CSV文件
report_df = pd.read_csv('reportForFergusTwo.csv')
details_df = pd.read_csv('details.csv')

# 获取最高分对应的用户名(如果有多个测验,这里会找到所有测验中最高分的用户,你可以按需调整)
top_username = report_df.loc[report_df['max_score'].idxmax(), 'top_username']

# 匹配用户详情
user_details = details_df[details_df['username'] == top_username]

# 输出结果
if not user_details.empty:
    print("🎉 最高分用户详情:")
    print(user_details.to_string(index=False))
    # 也可以把详情合并到报告文件里,方便交付给Fergus
    merged_report = report_df.merge(details_df, on='username', how='left')
    merged_report.to_csv('reportForFergusTwo_with_details.csv', index=False, encoding='utf-8')
    print("✅ 已生成包含用户详情的新报告:reportForFergusTwo_with_details.csv")
else:
    print(f"⚠️ 未找到用户 {top_username} 的详细信息")

一些注意事项

  • 确保两个文件里的username字段完全匹配(大小写、空格、特殊字符都要一致,否则会匹配失败)
  • 如果你的报告里有多个测验(多行数据),可以循环遍历每一行,分别获取每个测验的最高分用户详情
  • 可以把用户详情直接追加到reportForFergusTwo.csv的对应行里,这样交付给Fergus的报告更完整直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:40:17