2013-05-03 4 views
5

В python 2.7.3, как я могу запустить цикл из второй строки? напримерpython csv reader, цикл из второй строки

first_row = cvsreader.next(); 
for row in ???: #expect to begin the loop from second row 
    blah...blah... 
+0

вы имели ответ прямо там :-) – bernie

+0

я должен испытать самый очевидный путь, прежде чем спросить, что это глупый вопрос :( – GuLearn

+0

не вопрос не является – bernie

ответ

8
first_row = next(csvreader) # Compatible with Python 3.x (also 2.7) 
for row in csvreader: # begins with second row 
    # ... 

Тестирование это действительно работает:

>>> import csv 
>>> csvreader = csv.reader(['first,second', '2,a', '3,b']) 
>>> header = next(csvreader) 
>>> for line in csvreader: 
    print line 
['2', 'a'] 
['3', 'b'] 
+0

'.next()' был удален в Python 3. Я бы использовал 'next (csvreader)'. – Blender

+0

@Blender Спасибо; обновлено с вашим комментарием. –

+0

'next (csvreader)' работает для обеих версий. – Blender

2
next(reader, None) # Don't raise exception if no line exists 

выглядит наиболее читаемым IMO

Другой альтернативой является

from itertools import islice 
for row in islice(reader, 1, None) 

Но разве вы не должны использовать заголовок? Рассмотрим csv.DictReader, который по умолчанию устанавливает имена полей в первую строку.

+0

Благодарим за упоминание об альтернативе! Я не использую заголовок, потому что конкретный файл csv, с которым я имею дело, имеет пустой заголовок: P – GuLearn

0

Предполагая, что 1-й строки содержит имена полей:

import csv 
for field in csv.DictReader(open("./lists/SP500.csv", 'rb')): 
    symbol = (field['ticker']).rstrip()