Skip to content

Instantly share code, notes, and snippets.

@relekang
Created April 30, 2014 02:43
Show Gist options
  • Save relekang/e8a2bf2c8cabb4088df4 to your computer and use it in GitHub Desktop.
Save relekang/e8a2bf2c8cabb4088df4 to your computer and use it in GitHub Desktop.
import sys
import csv
import argparse
def find_first_common_column(list_1, list_2):
column = list(set(list_1) & set(list_2))[0]
for i, col in enumerate(list_1):
if col == column:
place_1 = i
for i, col in enumerate(list_2):
if col == column:
place_2 = i
return (column, place_1, place_2)
def merge_files(path_1, path_2,):
csv_1 = open(path_1)
csv_2 = open(path_2)
csv_output = open('output.csv', 'w')
reader_1 = csv.reader(csv_1, delimiter=',')
reader_2 = csv.reader(csv_2, delimiter=',')
writer = csv.writer(csv_output, delimiter=',')
header_1 = reader_1.next()
header_2 = reader_2.next()
common_column = find_first_common_column(header_1, header_2)
print('Uses "%s" as common column' % common_column[0])
data = {}
for row in reader_1:
key = row.pop(common_column[1])
data[key] = row
header_1.pop(common_column[1])
print('Writing file')
writer.writerow(header_2 + header_1)
for row in reader_2:
try:
writer.writerow(row + data[row[common_column[2]]])
sys.stdout.write('.')
except KeyError:
sys.stdout.write('F')
csv_1.close()
csv_2.close()
csv_output.close()
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
'file_1',
help='File containing lookup data. The common column should be '
'unique in this file.'
)
parser.add_argument('file_2')
args = parser.parse_args()
merge_files(args.file_1, args.file_2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment