Comment lire des lignes spécifiques d'un grand fichier csv

Je suis en train de lire quelques lignes d'un grand fichier csv, et je ne veux pas charger tout le fichier en mémoire. L'indice des lignes spécifiques sont donnés dans une liste L = [2, 5, 15, 98, ...] et mon fichier csv ressemble à ceci:

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

En utilisant les idées mentionnées ici - je utiliser la commande suivante pour lire les lignes

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]

Ai immédiatement le message d'erreur suivant:

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

Question 1. Il semble que mon utilisation de la for boucles ici est évidemment faux. Toutes les idées sur la façon de résoudre ce problème?

D'autre part, la suite fait le travail, mais il est trop lent:

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)

La Question 2. Aucune idée sur la façon d'améliorer cette méthode de base d'aller à travers l'ensemble du dossier jusqu'à ce que j'atteigne la ligne je puis l'imprimer?

InformationsquelleAutor Keivan | 2015-04-10