Como ler linhas específicas de um arquivo csv grande

Estou tentando ler algumas linhas específicas de um arquivo csv grande e não quero carregar o arquivo inteiro na memória. O índice das linhas específicas é fornecido em uma listaL = [2, 5, 15, 98, ...] e meu arquivo csv fica assim:

Col 1, Col 2, Col3
row11, row12, row13
row21, row22, row23
row31, row32, row33
...

Usando as idéias mencionadasaqui Eu uso o seguinte comando para ler as linhas

with open('~/file.csv') as f:
    r = csv.DictReader(f) # I need to read it as a dictionary for my purpose

    for i in L:
        for row in enumerate(r):
            print row[i]

Eu recebo imediatamente o seguinte erro:

IndexError                                Traceback (most recent call last)
<ipython-input-25-78951a0d4937> in <module>()
      6     for i in L:
      7         for row in enumerate(r):
----> 8             print row[i]
IndexError: tuple index out of range

Questão 1. Parece que meu uso dofor loops aqui está obviamente errado. Alguma ideia de como consertar isso?

Por outro lado, o seguinte faz o trabalho, mas é muito lento:

def read_csv_line(line_number):
    with open("~/file.csv") as f:
        r = csv.DictReader(f)
        for i, line in enumerate(r):
            if i == (line_number - 2):
                return line
    return None

for i in L:
    print read_csv_line(i)

Questão 2. Alguma idéia de como melhorar esse método básico de percorrer todo o arquivo até chegar à linha e depois imprimi-lo?

questionAnswers(4)

yourAnswerToTheQuestion