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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:15:00