KeyError в функции .append() при переводе csv в json

Итак, вот что я пытаюсь сделать. Я пытаюсь взять файл 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

Пожалуйста, добавьте точную ошибку и полную трассировку, если это возможно. Нет такой вещи, как "неизвестная ошибка".

martineau 22.12.2020 07:45

Ошибка была добавлена

ZaweeeZ 22.12.2020 07:48

Это означает, что в словаре row, возвращаемом DictReader, нет записи со значением ключа 0.

martineau 22.12.2020 07:52

Попробуйте напечатать row в строке перед ошибкой, и вы увидите, к чему вы пытаетесь получить доступ.

DisappointedByUnaccountableMod 22.12.2020 08:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
230
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите указать поле по номеру столбца (как вы это делаете с 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 22.12.2020 08:16

@ZaweeeZ Попробуйте распечатать row. Тогда вы быстро поймете, почему row[0] дает KeyError.

BoarGules 22.12.2020 08:56

@ZaweeeZ Я соответственно обновил свой ответ.

blhsing 22.12.2020 12:45

Другие вопросы по теме