Created
April 30, 2014 02:43
-
-
Save relekang/e8a2bf2c8cabb4088df4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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