Пропуск строк, csv Dict Reader Python

у меня есть файл с неприятным предисловием к заголовку. Так это выглядит так:

Review performed by:    

Meeting:    

Person:     

Number:     

Code: 



Confirmation    

Tab Separated Header Names That I Want To Use

Я хочу пропустить все и использовать имена заголовков tab sep для моего кода. Это то, что у меня есть до сих пор:

reader = csv.DictReader(CSVFile)
for i in range(14): #trying to skip the first 14 rows
    reader.next()
for row in reader:
    print(row)
    if args.nextCode:
        tab = (row["Tab"])
        sep = int((row["Separated"]))

этот код получает эту ошибку:

File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.py", line 104, in next
    row = self.reader.next()
StopIteration

Я попытался распечатать строки, чтобы увидеть, где я был в файле, и я изменил "диапазон (14)" на диапазон 5, но когда я печатаю строку, я получаю это:

{'Review performed by:': 'Tab/tSeparated/tHeader/tNames/tThat/tI/tWant/tTo/tUse'}
Traceback (most recent call last):
  File "program.py", line 396, in <module>
    main()
  File "program.py", line 234, in main
    tab = (row["Tab"])
KeyError: 'Tab'

поэтому я не совсем уверен правильный способ пропустить эти верхние строки. Любая помощь будет оценена.

2 ответов


A csv.DictReader считывает первую строку из файла когда он создан, чтобы получить заголовки для последующих строк. Поэтому он использует Review performed by: как строка заголовка,затем вы пропустите следующие 14 строк.

вместо этого пропустите строки до создания DictReader:

for i in range(14):
    CSVFile.next()
reader = csv.DictReader(CSVFile)
...

вы могли бы обернуть CSVFile С itertools.islice объект итератора для среза строк предисловия при создании DictReader, вместо того, чтобы предоставлять его непосредственно конструктору.

это работает, потому что csv.reader конструктор примет любой " объект, который поддерживает итератор протокол и возвращает строку каждый раз его next() метод называется" по csv docs. Это также относится к csv.DictReaders, потому что они используют в основе reader внутренне экземпляр.

N = 14  # number of lines to skip
for row in csv.DictReader(itertools.islice(CSVFile, N, None)):
    process row ...