2013-09-26 10 views

risposta

7

È possibile utilizzare itertools.islice:

import itertools 

i, j = 10, 20 
with open(trainFile, 'rt') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') 
    for row in itertools.islice(spamreader, i, j+1): 
     print (', '.join(row)) 

alternativa (codice seguente è possibile perché csv.reader accettare un iterabile):

NOTA : funziona solo quando le righe CSV non contengono newline.

import itertools 

i, j = 10, 20 
with open(trainFile, 'rt') as csvfile: 
    spamreader = csv.reader(itertools.islice(csvfile, i, j+1), 
          delimiter=' ', quotechar='|') 
    for row in spamreader: 
     print (', '.join(row)) 
+0

@kworr, Grazie per il commento. Lo dico. – falsetru

+1

Nella tua alternativa i valori di 'i' e' j' non sono referenziati ... quindi dubito che funzioni come mostrato. – martineau

+0

@martineau, grazie per averlo indicato. Ho aggiornato l'alternativa di conseguenza. – falsetru

1

Usa islice, ad esempio:

rows_1_to_50 = itertools.islice(spamreader, 0, 50) 
for row in rows_1_to_50: 
    pass 
1

Un'altra implementazione itertools utilizzando dropwhile e takewhile

from itertools import takewhile, dropwhile 
trainFile = 'x.1' 
low_lim = 3 
high_lim = 6 
with open(trainFile, 'rt') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') 
    g = (x for x in enumerate(spamreader, 1)) 
    g = dropwhile(lambda x: x[0] < low_lim, g) 
    g = takewhile(lambda x: x[0] <= high_lim, g) 
    for row in g: 
     print (', '.join(row[1])) 
+0

Quando dici 'trainFile = 'x.1'' che si riferisce al percorso completo, corretto? –

+0

@ MattO'Brien, è corretto. Potrebbe essere completo o relativo – iruvar

Problemi correlati