Caveat: none of the solutions (including mine) deal with the case of the field being longer than the width. You might want to throw an exception.
Alternatively, you can just crop the results. Tweaking MRAB's elegant solution:
field_widths = [14, 6, 18, 21, 21, 4, 6] infile = open("input.csv") out = open("ouptut.csv", 'w') for fields in csv.reader(infile, delimiter='|'): padded_fields = [ # pad, and then crop field.ljust(width)[:width] for field, width in zip(fields, field_widths) ] out.write("".join(padded_fields) + "\n") infile.close() out.close() If you want them right-justified, you can use field.rjust(width)[-width:] -tkc -- http://mail.python.org/mailman/listinfo/python-list