Python, since the 1.6 version, provides the module zipfile to handle this kind of circumstances. An example usage:
import csv
import zipfile
with zipfile.ZipFile('myarchive.zip') as archive:
    with archive.open('the_zipped_file.csv') as fin:
        reader = csv.reader(fin, ...)
        for record in reader:
            # process record.
note that in python3 things get a bit more complicated because the file-like object returned by archive.open yields bytes, while csv.reader wants strings. You can write a simple class that does the conversion from bytes to strings using a given encoding:
class EncodingConverter:
    def __init__(self, fobj, encoding):
        self._iter_fobj = iter(fobj)
        self._encoding = encoding
    def __iter__(self):
        return self
    def __next__(self):
        return next(self._iter_fobj).decode(self._encoding)
and use it like:
import csv
import zipfile
with zipfile.ZipFile('myarchive.zip') as archive:
    with archive.open('the_zipped_file.csv') as fin:
        reader = csv.reader(EncodingConverter(fin, 'utf-8'), ...)
        for record in reader:
            # process record.