def unzip(csv_in, fields, csv_out_spec, csv_out_unspec, zip_field='id'): input_csv = iter(csv_in) header_row = input_csv.next() header = Header(header_row) if zip_field in header: raise DuplicateFieldError(zip_field) spec_extractors = [header.extractor(field) for field in fields] unspec_extractors = [ header.extractor(field) for field in header_row if field not in fields ] def extract_to(output, extractors, row_id, row): output.writerow([str(row_id)] + [extract_field(row) for extract_field in extractors]) def unzip_row(row_id, row): extract_to(csv_out_spec, spec_extractors, row_id, row) extract_to(csv_out_unspec, unspec_extractors, row_id, row) unzip_row(zip_field, header_row) for zip_id, row in enumerate(input_csv): unzip_row(zip_id, row)
def unzip(csv_in, fields, csv_out_spec, csv_out_unspec, zip_field='id'): input_csv = iter(csv_in) header_row = input_csv.next() header = Header(header_row) if zip_field in header: raise DuplicateFieldError(zip_field) spec_extractors = [header.extractor(field) for field in fields] unspec_extractors = [ header.extractor(field) for field in header_row if field not in fields] def extract_to(output, extractors, row_id, row): output.writerow( [str(row_id)] + [extract_field(row) for extract_field in extractors]) def unzip_row(row_id, row): extract_to(csv_out_spec, spec_extractors, row_id, row) extract_to(csv_out_unspec, unspec_extractors, row_id, row) unzip_row(zip_field, header_row) for zip_id, row in enumerate(input_csv): unzip_row(zip_id, row)