Python — преобразование данных json в формат csv для определенного ключа

Я работаю над приложением и хочу извлечь данные из файла json с помощью ключа и сохранить их в файле csv для дальнейшего использования.

Пример данных json выглядит примерно так:

[ {"Name " : "John","Office":"1st Ave", "Birth date": "1978-01-01"}, {"Name":"Jane","Office": "2nd Ave","Birth date": "1970-01-01"}]

Это просто фиктивные данные

Пока что я сделал это:


with open("input.json") as infile, open('output.csv', 'w') as outfile:
    writer = csv.writer(outfile, delimiter=' ')

    i=0
    for line in infile:
        d = json.loads(line)
        writer.writerows(d[i]['Name'])
        i=i+1

но с этим кодом проблема, с которой я сталкиваюсь, заключается в том, что файл csv выглядит примерно так:

J

o

h

n

вот и все, что я хочу:

Name

John

Jane

Любая идея о том, почему это происходит и как это можно решить?

Также :

Я хотел бы добавить метку в csv как 0 в качестве второго столбца. Как в :

Name ID

John 0

Jane 0

Может не иметь значения, но ваши ключи во входном файле неоднородны: у вас есть «Имя» (с последним пробелом) и «Имя» (без конечного интервала)

Sebastien D 21.05.2019 17:02

Я, как уже упоминалось, это просто фиктивные данные

Nisha Priya 21.05.2019 21:16
Почему в 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
2
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для каждой строки ваше «Имя» не является списком.

line = '{"Name": "John", "Office": "1st Ave", "Birth date": "1978-01-01"}'

d = json.loads(line)
d['Name'] # "John"

Вам нужно создать список предметов перед writerows:

names = [json.loads(x)['Name'] for x in lines]
writer.writerows(names)
Ответ принят как подходящий

Лично я бы пошел довольно прямолинейно с pandas

import pandas as pd
df = pd.read_json('input.json')
df['Name'].to_csv('output.csv', index=False)
df['ID'] = O
df[['Name','ID']].to_csv('output_2.csv', index=False, sep = ' ')

Насколько я понял значение 'ID' всегда равно 0. Правильно?

да, идентификатор - это просто еще один столбец, в котором все записи равны 0 в файле csv, но с помощью этого кода он добавляется в тот же столбец вместо нового столбца?

Nisha Priya 21.05.2019 21:19

в коде я определяю новый столбец и устанавливаю значение 0. Затем я беру подмножество набора данных («Имя», «Идентификатор») и экспортирую его в нужный CSV-файл.

Sebastien D 21.05.2019 23:07

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