Ниже приведен пример 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])