The simplest and (probably) most efficient way to read/write any-sized CSV in Python will always be to use the csv module—bar none.
Its reader provides a very simple interface for iterating the CSV a-row-at-a-time (so never more than one row's worth of memory consumed), and that row can be passed directly to the writer (which will probably be buffered, so minimal sys calls). But, the documentation doesn't show you how to do this, even though it's so simple:
reader → row → process(row) → writerow(row)