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?