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
相关产品推荐
相关产品推荐

