python通过DictReader实现两个csv文件的映射查找lookup之代码详解

Posted ShenLiang2025

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python通过DictReader实现两个csv文件的映射查找lookup之代码详解相关的知识,希望对你有一定的参考价值。

python里应用DictReader的实现匹配查找

需求简介

通过应用DictReader读取csv文件,实现通过一个CSV在另外个CSV里找到对应的解释,类似lookup。

数据内容

1 这里假定有员工数据emp.csv,但不知道字段的解释,数据内容见下:
EMPNO    ENAME    JOB    MGR    HIREDATE    SAL    COMM    DEPTNO
7369    SMITH    CLERK    7902    1980-12-27    800        20);
7499    ALLEN    SALESMAN    7698    1981-2-20    1600    300    30


2 有字段对应解释数据empcom.csv,内容见下:
name    label
EMPNO   雇员的编号,由四位数字所组成
ENAME   雇员的姓名,由10位字符所组成
JOB 雇员的职位
MGR 雇员对应的领导编号,领导也是雇员
HIREDATE    雇员的雇佣日期
SAL 基本工资,其中有两位小数,五倍整数,一共是七位
COMM    奖金,佣金
DEPTNO  雇员所在的部门编号

需要得到emp.csv里每个记录和empcom.csv里的解释创新组成键值对。

代码解释

from csv import DictReader
def collookup():
    #通过DicReader加载emp.csv,此时EMPNO、ENAME、JOB都是键(key),"7369	SMITH"是值(value)
    empfile=DictReader(open('./data/emp.csv','rt',encoding='utf8'),delimiter='\\t')
    ##通过DicReader加载empcom.csv,此时name、label都是键(key),"EMPNO	雇员的编号,由四位数字所组成"都是值(value)
    empcomfile=DictReader(open('./data/empcom.csv','rt',encoding='utf8'),delimiter='\\t')
    empcomdata = [d for d in empcomfile]
    new_rows=[]
    #通过enumerate遍历方便控制文件的行数,当前示例仅读取emp.csv里的第一行
    for num,empdic in enumerate(empfile):
        if num == 0:
            #对每一行遍历分别保留到键dkey和值dval里
            for dkey,dval in empdic.items():
                for empcomdic in empcomdata:
                    #如果emp.csv里的键存在于empcomdic的值时的判断
                    if dkey in empcomdic.values():
                        #将empcomdic里的值和empdic里的值合成新的dic并追加到new_rows
                        new_rows.append({empcomdic.get('label'):dval})
    return new_rows


if __name__ == '__main__':
    print(collookup())

结果

以上是关于python通过DictReader实现两个csv文件的映射查找lookup之代码详解的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中使用 csv.DictReader 进行数据类型转换的最快方法

带有 UTF-8 数据的 Python CSV DictReader

python Python:csv.DictReader(csvfile),for循环

如何复制python DictReader对象?

如何使用 csv.DictReader 在 django 中上传和读取 csv 文件?

从 csv.DictReader 中查找字典值