Итак, вот что я пытаюсь сделать. Я пытаюсь взять файл csv и перевести его в Json, чтобы я мог сравнивать наборы данных.
Однако по какой-то причине я не могу найти, когда я пытаюсь добавить заголовки, возникает ошибка:
KeyError: 0
Вот мой код
#Open file
Open file
with open(filename, "r") as f:
sampleReader = csv.DictReader(f)
next(sampleReader)
data = {"test":[]}
for row in sampleReader:
data["test"].append({"ACTIVITY DATE": row[0]})
print(data)
Выслеживать:
KeyError Traceback (most recent call last)
<ipython-input-4-582fa1fa84a1> in <module>
5 data = {"test":[]}
6 for row in sampleReader:
----> 7 data["test"].append({"ACTIVITY DATE": row[0]})
8 print(data)
9
KeyError: 0
Ошибка была добавлена
Это означает, что в словаре row
, возвращаемом DictReader
, нет записи со значением ключа 0
.
Попробуйте напечатать row
в строке перед ошибкой, и вы увидите, к чему вы пытаетесь получить доступ.
Если вы хотите указать поле по номеру столбца (как вы это делаете с row[0]
), а не по имени столбца, вы должны использовать csv.reader
вместо csv.DictReader
:
sampleReader = csv.reader(f)
Если вы хотите указать поле по имени его столбца, вы не должны пропускать строку с next(sampleReader)
, так как csv.DictReader
уже использует строку заголовка, и вы также должны использовать желаемое имя столбца в качестве ключа для получения значения поля:
with open(filename, "r") as f:
sampleReader = csv.DictReader(f)
data = {"test":[]}
for row in sampleReader:
data["test"].append({"ACTIVITY DATE": row['activity date']})
print(data)
Не могли бы вы пояснить это? Я хочу указать по имени? имя столбца - «дата активности»?
@ZaweeeZ Попробуйте распечатать row
. Тогда вы быстро поймете, почему row[0]
дает KeyError
.
@ZaweeeZ Я соответственно обновил свой ответ.
Пожалуйста, добавьте точную ошибку и полную трассировку, если это возможно. Нет такой вещи, как "неизвестная ошибка".