Краткий ответ: да , вы можете прочитать определенные столбцы (но с оговоркой).Однако будет намного проще, если вы просто прочитаете все столбцы, а затем создадите словарь из нужных вам столбцов.Это намного проще и может даже работать лучше.
Вы можете использовать аргумент fieldnames
, чтобы явно определить интересующие вас столбцы. Предостережение заключается в том, что другие столбцы будут по-прежнемуприсутствовать в словаре под ключом None
(если вы не укажете другой ключ с аргументом restkey
).
Из документов :
Параметр fieldnames
является последовательностью.Если fieldnames
опущен, значения в первой строке файла f будут использоваться как fieldnames
.Независимо от того, как определяется fieldnames
, упорядоченный словарь сохраняет свое первоначальное упорядочение.
Если строка содержит больше полей, чем fieldnames
, оставшиеся данные помещаются в список и сохраняются с именем поля, заданным параметромrestkey
(по умолчанию None).Если в непустой строке меньше полей, чем fieldnames
, пропущенные значения заполняются None
.
. Вы можете использовать fieldnames
, чтобы указать нужные столбцы, а затем использовать.pop
для удаления ключа None
(и его значений).
Рассмотрим следующий файл:
header1,header2
a,b
c,d
e,f
Тогда:
with open('test.csv') as csvfile:
csvReader = csv.DictReader(csvfile, fieldnames=['header1'])
print([row for row in csvReader])
# [OrderedDict([('header1', 'header1'), (None, ['header2'])]),
# OrderedDict([('header1', 'a'), (None, ['b'])]),
# OrderedDict([('header1', 'c'), (None, ['d'])]),
# OrderedDict([('header1', 'e'), (None, ['f'])])]
Если мы выскакиваемNone
ключ:
csvReader = list(csvReader)
[row.pop(None) for row in csvReader]
# yes, abusing list comprehension for a side effect for sake of a simple example.
# Don't do that in production code
print([row for row in csvReader])
# [OrderedDict([('header1', 'header1')]), OrderedDict([('header1', 'a')]),
# OrderedDict([('header1', 'c')]), OrderedDict([('header1', 'e')])]