如何用Python实现输入员工号查询CSV文件中对应员工全部信息
员工循环查询功能问题修复
现有代码问题梳理
- 未按需求先完成全量字典构建:当前逻辑是每读取一行员工数据就触发一次ID输入,数据未完全加载就进入查询
- 索引逻辑错误:将输入的员工号作为单条员工数据的键取值,实际应该预先用员工号作为总字典的键,存储对应员工的全量信息
- 缺少异常处理:输入不存在的工号会直接抛出KeyError崩溃,也没有设置查询退出入口
- CSV解析逻辑不完善:手动拆分逗号无法处理字段内嵌逗号的合法CSV场景,容易出现索引错位
修正后完整代码
import csv def bulkEMail(emailList): print('\n*** RESULTS *** \n') for emailInfo in emailList.values(): print('Email Info: {} {} {}'.format( emailInfo['e mail'], emailInfo['first name'], emailInfo['last name'])) return True # 第一步:全量读取CSV构建员工索引字典 emp_db = {} file_path = '/Users/etaibally/Desktop/employee_records_small.csv' try: with open(file_path, 'r', encoding='utf-8') as f: # 统一处理表头格式,避免空格、大小写问题 raw_header = f.readline().strip() header = [col.strip().lower() for col in raw_header.split(',')] # 用csv标准库读取行数据,避免字段内嵌逗号导致的拆分错误 reader = csv.DictReader(f, fieldnames=header) for row in reader: emp_id = row['emp id'] emp_db[emp_id] = row except FileNotFoundError as err: print(f'文件加载失败:{err}') exit() # 原有批量邮件打印逻辑可按需调用 # status = bulkEMail(emp_db) # 第二步:循环查询逻辑 while True: input_id = input('请输入员工号(输入q即可退出查询):').strip() # 退出条件 if input_id.lower() == 'q': print('查询结束') break # 匹配员工信息 if input_id in emp_db: print('\n===== 员工关联信息 =====') for field, value in emp_db[input_id].items(): print(f'{field}: {value}') print('========================\n') else: print(f'未找到工号为【{input_id}】的员工,请重新输入\n')
功能说明
- 先加载全量CSV数据完成字典构建,再进入查询环节,符合需求逻辑
- 用Python内置csv模块处理文件,兼容合法CSV格式的特殊场景
- 循环查询支持随时退出,工号不存在时给出友好提示
- 保留原有bulkEMail函数逻辑,可直接调用输出全量员工邮箱信息
内容的提问来源于stack exchange,提问作者diogenesonthechoppingblock
相关产品推荐
相关产品推荐

