Пропуск строк, 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.DictReader
s, потому что они используют в основе reader
внутренне экземпляр.
N = 14 # number of lines to skip
for row in csv.DictReader(itertools.islice(CSVFile, N, None)):
process row ...