Преобразование файла CSV в файл JSON с использованием Python

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

Key ,Field_1 ,Field_2 ...
0   ,a       ,e       ...
1   ,b       ,f       ...
2   ,c       ,g       ...
3   ,d       ,h       ...

В структурированный файл json. Ключ: [Поле_1, Поле_2, ...]

Так что csv выше будет выглядеть как

{
  "0" : ["a", "e", ...]
  "1" : ["b", "f", ...]
  "2" : ["c", "g", ...]
  "3" : ["d", "h", ...]
}

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

csv = pd.read_csv("file.csv")
n = 0
length = # number of keys
for i in csv:
    if n == 0:
        for y in range(lentgh):
            # Assign as the header
    else:
        for y in range(length):
            # Assign as the properties
    n += 1

Также я пытаюсь сделать так, чтобы все новые данные автоматически добавлялись в конец файла json.

pandas.Dataframe.to_json преобразует фрейм данных в JSON и имеет несколько параметров, которые могут изменять формат. Вы рассматривали один из этих форматов вместо своего?
Paul 21.10.2018 20:19
Почему в 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
1
261
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

json по-прежнему будет отступать от списков значений, но это преобразует ваш csv в нужный словарь и добавит его в файл json.

import csv
import json

with open('blah.csv') as f:
    reader = csv.reader(f)
    next(reader)
    d = dict((rows[0], rows[1:]) for rows in reader)

with open('blah.json', 'a') as f:
    json.dump(d, f, indent=4)

У меня проблема с последней строкой, в ней говорится: «dumps () принимает 1 позиционный аргумент, но было дано 2 позиционных аргумента», в основном это не позволяет мне иметь и d, и f

PSM 21.10.2018 22:03

@PSM ой, извините, да, должно быть dump, вы поняли :)

vash_the_stampede 21.10.2018 22:06

И еще кое-что, знаете ли вы, как я могу изменить этот код, чтобы при использовании существующего файла новые данные не добавлялись в новый словарь после нового ({"old_data": "old_data"} {"new_data ":" new_data "}) Я получаю новые данные в существующих скобках ({" old_data ":" old_data "," new_data ":" new_data "})

PSM 21.10.2018 22:09

@psm извините, только что вышел из дома, но, прочитав, может показаться, что вам придется прочитать, загрузить старый json, а затем обновить этот словарь и переписать весь файл

vash_the_stampede 21.10.2018 22:27

Это должно делать то, что вы хотите.

import csv
import json

csvfile = open('C:\\your_path\\file.csv', 'r')
jsonfile = open('C:\\your_path\\file.json', 'w')

fieldnames = ("ID","Name","Address","State")
reader = csv.DictReader(csvfile, fieldnames)
for row in reader:
    json.dump(row, jsonfile)
    jsonfile.write('\n')

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