However, I just read the following:
http://docs.python.org/2/library/subprocess.html#subprocess.Popen.communicate
βThe data read is buffered in memory, so do not use this method if the data size is large or unlimited.β
Instead I opted for this solution by Spencer Rathbun:
http://superuser.com/questions/381394/unix-split-a-huge-gz-file-by-line
β avoid reading the entire file into memory using subprocess.communicate() and cStringIO
β initialize the cc, lc and sz outside of the internal loop