<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">I have several csv file I need to append (vertically). They have different but overlapping headers. For example;</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
file1 headers ['a', 'b', 'c']</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">file2 headers ['d', 'e']</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
file3 headers ['c', 'd']</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">
Is there a better way than this</div>
<div class="gmail_default"><div class="gmail_default"><font face="verdana, sans-serif">import csv</font></div><div class="gmail_default"><font face="verdana, sans-serif">def merge_csv(fileList, newFileName):</font></div>
<div class="gmail_default">
<font face="verdana, sans-serif"> allHeaders = set([])</font></div><div class="gmail_default"><font face="verdana, sans-serif"> for afile in fileList:</font></div><div class="gmail_default"><font face="verdana, sans-serif"> with open(afile, 'rb') as csvfilesin:</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> eachheader = csv.reader(csvfilesin, delimiter=',').next()</font></div><div class="gmail_default"><font face="verdana, sans-serif"> allHeaders.update(eachheader)</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> print(allHeaders)</font></div><div class="gmail_default"><font face="verdana, sans-serif"> with open(newFileName, 'wb') as csvfileout:</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> outfile = csv.DictWriter(csvfileout, allHeaders)</font></div><div class="gmail_default"><font face="verdana, sans-serif"> outfile.writeheader()</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> for afile in fileList:</font></div><div class="gmail_default"><font face="verdana, sans-serif"> print('***'+afile)</font></div><div class="gmail_default">
<font face="verdana, sans-serif"> with open(afile, 'rb') as csvfilesin:</font></div><div class="gmail_default"><font face="verdana, sans-serif"> rows = csv.DictReader(csvfilesin, delimiter=',')</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> for r in rows:</font></div><div class="gmail_default"><font face="verdana, sans-serif"> print(allHeaders.issuperset(r.keys()))</font></div>
<div class="gmail_default"><font face="verdana, sans-serif"> outfile.writerow(r)</font></div><div class="gmail_default"><font face="verdana, sans-serif"><br></font></div></div><div><div>Vincent Davis</div>
<br></div>
</div>