| 9 | 1 """ | 
|  | 2 Load a CSV file by columns | 
|  | 3 """ | 
|  | 4 | 
|  | 5 | 
|  | 6 import csv | 
|  | 7 from .decorators import fileobj | 
|  | 8 | 
|  | 9 | 
|  | 10 @fileobj | 
|  | 11 def read_columns(fp, type=dict): | 
|  | 12     """read columns from CSV `fp` as `type`""" | 
|  | 13 | 
|  | 14     reader = csv.reader(fp) | 
|  | 15     columns = None | 
|  | 16 | 
|  | 17     for row in reader: | 
|  | 18 | 
|  | 19         if columns is None: | 
|  | 20             # read the header | 
|  | 21             header = row | 
|  | 22 | 
|  | 23             # make a return value | 
|  | 24             columns = type([(key, []) for key in header]) | 
|  | 25             continue | 
|  | 26 | 
|  | 27         for key, value in zip(header, row): | 
|  | 28             columns[key].append(value) | 
|  | 29 | 
|  | 30     return columns |