имена csvreader.field не распознаются как атрибут объекта читателя csv в python - PullRequest
5 голосов
/ 16 октября 2010

Я пытаюсь извлечь заголовок файла CSV в Python с помощью модуля CSV.

Файл CSV довольно плоский и выглядит примерно так:

Это, Тот, Другой

1, 2, 3

Я делаю следующее:

  1. Считайте в CSV-файл и сделайте объект чтения
  2. переместить итератор считывателя на следующую строку, чтобы заставить его получить доступ к первой строке хотя бы один раз (из документации модуля csv: «Если этот параметр не передан в качестве параметра при создании объекта, этот атрибут инициализируется при первом доступе или когда первая запись читается из файла. ")
  3. присвоение атрибута .fieldnames переменной и его печать

вот фрагмент кода для иллюстрации:

datafile = open(fname, "rb")
reader = csv.reader(datafile) #use csv module to parse in the header
reader.next() # read next line so header will be accessed
rfd_header = reader.fieldnames

print "header:\n"
print rfd_header

Это приводит к ошибке:

AttributeError: у объекта '_csv.reader' нет атрибута 'fieldnames'

Звучит так, как будто атрибут .fieldnames отсутствует, но есть в документации по Python 2.6.6 (та же версия Python, которую я использую)

Буду признателен за понимание этой тайны. Если есть альтернативный метод для извлечения заголовка, это тоже было бы здорово!

Спасибо.

Ответы [ 3 ]

8 голосов
/ 16 октября 2010

Если вы действительно хотите использовать csv.reader вместо csv.DictReader, все, что вам нужно сделать, это заменить

reader.next() # read next line so header will be accessed
rfd_header = reader.fieldnames

на

rfd_header = reader.next()
5 голосов
/ 16 октября 2010

Попробуйте csv.DictReader вместо csv.reader.В документации это тоже сказано:

Объекты DictReader имеют следующий открытый атрибут:

csvreader.fieldnames - если не передан в качестве параметра при создании объекта,этот атрибут инициализируется при первом доступе или при чтении первой записи из файла.

http://docs.python.org/library/csv.html

0 голосов
/ 08 января 2015

Если вам нужен результат в списке, вы можете взять:

rfd_header = reader.next()

Это должно сохранить первую строку (заголовок / поля) в переменной "rfd_header"

Затем выможно перебрать значения переменной и поместить в список

headerList = []
for item in rfd_header:
    headerList.append(item)

Затем вы можете вывести результат

print headerList
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...