Как конвертировать CSV в JSON в Python?

Я очень новичок в программировании, изучал питон за последние 3/4 недели, и это одно из заданий.

вход

A, B, C, D
1, 2, 3, 4
5, 6, 7, 8

Выход

{{A:"1", B:"2", C:"3", D:"4"}, {A:"5", B:"6", C:"7", D:"8"}}

Я пытался с кодом как:

import csv
import json

csvfile = open('test.csv','r')
jsonfile = open('test.json','w')

x = ("a","b","c","d")

reader = csv.DictReader(csvfile, x)
for row in reader:
    json.dump(row, jsonfile)

Выход для этого кода приведен ниже:

{"a": "1", "null": ["5", "6", "7", "8", "9"], "c": "3", "b": "2", "d": "4"}

Может ли кто-нибудь помочь мне в этом?

Ответ 1

Дамп после обработки целых строк.


import csv
import json

with open('test.csv') as f:
    reader = csv.DictReader(f)
    rows = list(reader)

with open('test.json', 'w') as f:
    json.dump(rows, f)

Ответ 2

Прочтите csv и запишите его шаг за шагом.

#Read CSV File
def read_csv(file, json_file, format):
    csv_rows = []
    with open(file) as csvfile:
        reader = csv.DictReader(csvfile)
        title = reader.fieldnames
        for row in reader:
            csv_rows.extend([{title[i]:row[title[i]] for i in range(len(title))}])
        write_json(csv_rows, json_file, format)

#Convert csv data into json and write it
def write_json(data, json_file, format):
    with open(json_file, "w") as f:
        if format == "pretty":
            f.write(json.dumps(data, sort_keys=False, indent=4, separators=(',', ': '),encoding="utf-8",ensure_ascii=False))
        else:
            f.write(json.dumps(data))

Прочитайте полную статью .

Ответ 4

import csv
import json

# Constants to make everything easier
CSV_PATH = './csv.csv'
JSON_PATH = './json'

# Reads the file the same way that you did
csv_file = csv.DictReader(open(CSV_PATH, 'r'))

# Created a list and adds the rows to the list
json_list = []
for row in csv_file:
    json_list.append(row)

# Writes the json output to the file
file(JSON_PATH, 'w').write(json.dumps(json_list))

Ответ 5

Преобразование CSV в Json Python

import csv
import urllib2

url = '<YOURCSVURL>'
response = urllib2.urlopen(url)
cr = csv.reader(response)

line = {}
data = []

for index, row in enumerate(cr):
    if index:
        for index, col in enumerate(row):
            line[name[index]] = col

        data.append(line.copy())
    else:
        name = row

print data

Ответ 6

Вы можете попробовать это, используя этот код:

def inputfunction(lists):
 tmpdict = {}
 for element_index in range(len(lists)):
     tmpdict[headers[elementindex]] = lists[element_index]
 return tmpdict

def run(filename):
 filelist = [eachline.split(',') for eachline in open(inputfile,'r')]
 headers = filelist[0]
 values = filelist[1:]
 finallist = []
 for lists in values:
     finallist.append(inputfunction(lists))
 return finallist