source: workshop2010/trunk/src/grokworkshop/mergecsv.py @ 11150

Last change on this file since 11150 was 5554, checked in by uli, 14 years ago

Copy CSV file merger created last evening into repository.

File size: 1.4 KB
RevLine 
[5545]1"""Merge two CSV files and output the results.
2"""
[5548]3import csv
4
[5554]5def merge_csv_files(csv_path1=None, csv_path2=None,
6                    wanted_headers=['id', 'student_id', 'name']):
7    """Merge a file 'input1.csv' and 'input2.csv'.
8    """
9    input1 = csv_path1
10    input2 = csv_path2
[5548]11
[5554]12    students_reader = csv.DictReader(open(input1, 'rb'))
13    payments_reader = csv.DictReader(open(input2, 'rb'))
[5548]14
[5554]15    result_writer = None
[5548]16
[5554]17    students = dict()
18    for student in students_reader:
19        # Read all students and store them under their respective id
20        students[student['id']] = student
21    for payment in payments_reader:
22        # Read all payments and lookup a matching student
23        student_id = payment['student_id']
24
25        if student_id not in students.keys():
26            # Oops, what happened?
27            print "STUDENT NOT FOUND: ", student_id
28            continue
29
30        student = students[student_id]
31        result_line = payment
32        result_line.update(student)
33        if result_writer is None:
34            # Create a CSV writer and ouput header line
35            result_writer = csv.DictWriter(open('result.csv', 'wb'),
36                                           wanted_headers,
37                                           extrasaction='ignore')
38            header_line = dict([(x, x) for x in wanted_headers])
39            result_writer.writerow(header_line)
40        result_writer.writerow(result_line)
Note: See TracBrowser for help on using the repository browser.