объединить CSV-файлы, используя python 2.7.16 на основе общего столбца с общими значениями в первом CSV-файле - PullRequest
0 голосов
/ 03 марта 2020

Ниже приведен пример CSV-файлов, которые объединяются с использованием python сценария. Оба csvs имеют общий столбец. Но требование состоит в том, чтобы исключить общие значения столбцов второго CSV-файла, которых нет в первом CSV-файле.

semp.csv: -

ENAME,JOB,MGR,HIREDATE,SAL
KING,PRESIDENT,,17-NOV-81,5000
BLAKE,MANAGER,7839,01-MAY-81,2850
CLARK,MANAGER,7839,09-JUN-81,2450
JONES,MANAGER,7839,02-APR-81,2975
SCOTT,ANALYST,7566,09-DEC-81,3000
FORD,ANALYST,7566,03-DEC-81,3000
SMITH,CLERK,7902,17-DEC-80,800
ALLEN,SALESMAN,7698,20-FEB-81,1600
WARD,SALESMAN,7698,22-FEB-81,1250
MARTIN,SALESMAN,7698,28-SEP-81,1250
TURNER,SALESMAN,7698,08-SEP-81,1500
ADAMS,CLERK,7788,12-JAN-83,1100
JAMES,CLERK,7698,03-DEC-81,950
MILLER,CLERK,7782,23-JAN-82,1300

scountry.csv: -

ENAME,COUNTRY
KING,INDIA
CLARK,ENGLAND
MARTIN,USA
MILLER,NZ
JOHN,FINLAND
RAJ,INDIA
MANISH,NEPAL

Фактический вывод: -

ENAME,JOB,MGR,HIREDATE,SAL,COUNTRY
KING,PRESIDENT,,17-NOV-81,5000,INDIA
BLAKE,MANAGER,7839,01-MAY-81,2850,
CLARK,MANAGER,7839,09-JUN-81,2450,ENGLAND
JONES,MANAGER,7839,02-APR-81,2975,
SCOTT,ANALYST,7566,09-DEC-81,3000,
FORD,ANALYST,7566,03-DEC-81,3000,
SMITH,CLERK,7902,17-DEC-80,800,
ALLEN,SALESMAN,7698,20-FEB-81,1600,
WARD,SALESMAN,7698,22-FEB-81,1250,
MARTIN,SALESMAN,7698,28-SEP-81,1250,USA
TURNER,SALESMAN,7698,08-SEP-81,1500,
ADAMS,CLERK,7788,12-JAN-83,1100,
JAMES,CLERK,7698,03-DEC-81,950,
MILLER,CLERK,7782,23-JAN-82,1300,NZ
JOHN,,,,,FINLAND
RAJ,,,,,INDIA
MANISH,,,,,NEPAL

Ожидаемый вывод: -

ENAME,JOB,MGR,HIREDATE,SAL,COUNTRY
KING,PRESIDENT,,17-NOV-81,5000,INDIA
BLAKE,MANAGER,7839,01-MAY-81,2850,
CLARK,MANAGER,7839,09-JUN-81,2450,ENGLAND
JONES,MANAGER,7839,02-APR-81,2975,
SCOTT,ANALYST,7566,09-DEC-81,3000,
FORD,ANALYST,7566,03-DEC-81,3000,
SMITH,CLERK,7902,17-DEC-80,800,
ALLEN,SALESMAN,7698,20-FEB-81,1600,
WARD,SALESMAN,7698,22-FEB-81,1250,
MARTIN,SALESMAN,7698,28-SEP-81,1250,USA
TURNER,SALESMAN,7698,08-SEP-81,1500,
ADAMS,CLERK,7788,12-JAN-83,1100,
JAMES,CLERK,7698,03-DEC-81,950,
MILLER,CLERK,7782,23-JAN-82,1300,NZ

ENAME (JOHN, RAJ, MANI SH) отсутствуют в ENAME столбец semp.csv. Таким образом, они не должны появляться в выходных данных.

Python скрипт merge.py, который используется для соединения: -

import csv
from collections import OrderedDict

filenames = "semp.csv", "scountry.csv"
data = OrderedDict()
fieldnames = []
for filename in filenames:
    with open(filename, "rb") as fp: # python 2
        reader = csv.DictReader(fp)
        fieldnames.extend(reader.fieldnames)
        for row in reader:
            data.setdefault(row["ENAME"], {}).update(row)

fieldnames = list(OrderedDict.fromkeys(fieldnames))
with open("sop.csv", "wb") as fp:
    writer = csv.writer(fp)
    writer.writerow(fieldnames)
    for row in data.itervalues():
        writer.writerow([row.get(field, '') for field in fieldnames])
...