2013-09-26 7 views

Antwort

7

können Sie itertools.islice verwenden:

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)) 

Alternative (Code folgende ist möglich, weil csv.reader eine iterable annehmen):

HINWEIS : funktioniert nur, wenn CSV-Zeilen keine Zeilenumbrüche enthalten.

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 mit, vielen Dank für einen Kommentar. Ich erwähne das. – falsetru

+1

In Ihrer Alternative sind die Werte von "i" und "j" nicht referenziert ... also bezweifle ich, dass es wie gezeigt funktioniert. – martineau

+0

@martineau, Vielen Dank für den Hinweis darauf. Ich habe die Alternative entsprechend aktualisiert. – falsetru

1

Verwendung islice, zB:

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

Eine weitere itertools Implementierung dropwhile und 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

Wenn Sie 'trainFile = 'x.1'' sagen, das bezieht sich auf den vollständigen Pfad, richtig? –

+0

@ MattO'Brien, das ist richtig. Könnte vollständig oder relativ sein – iruvar

Verwandte Themen