如何在python中将csv转换为json?

Posted

技术标签:

【中文标题】如何在python中将csv转换为json?【英文标题】:How to convert csv to json in python? 【发布时间】:2016-11-05 07:42:50 【问题描述】:

我对编程很陌生,从过去 3/4 周开始一直在学习 python,并且 这是给的任务之一。

输入

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"

谁能帮我解决这个问题?

【问题讨论】:

输入不是 csv。输出不是有效的 json。你的意思是字典列表吗? [A:”1”, B:”2”, C:”3”, D:”4”, A:”5”, B:”6”, C:”7”, D:”8”] 对不起..!!是的,它是字典列表 【参考方案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)

【讨论】:

我刚试过,但没用。输出如下 ["A,B,C,D": "1,2,3,4", "A,B,C,D": "5,6,7,8", , ] @naren,我在发布之前进行了测试。它创建了一个文件test.json,内容为["A": "1", "C": "3", "B": "2", "D": "4", "A": "5", "C": "7", "B": "6", "D": "8"] 明白了,非常感谢@falsetru,相信你的指导会让我在python中表现出色 @naren,您的输入文件与问题中的输入不匹配。 @falsetru 你不是在重新发明DictReader吗?谢谢。【参考方案2】:
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))

【讨论】:

【参考方案3】:

您可以使用此代码进行尝试:

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

【讨论】:

您的答案中的代码没有正确缩进。此外,run() 函数末尾的 for 循环中的 return 将只允许循环执行一次迭代。 1:没有正确缩进。 2:您只是在创建不是 JSON 格式的每个列表的字典。 3:您必须在“输入函数”中传递“标题”也是一个参数 4:在运行函数中,您必须更改“文件名”参数到“输入文件”,反之亦然。【参考方案4】:

将 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

【讨论】:

【参考方案5】:

对于喜欢单行的人:

import csv
import json

json_data = [json.dumps(d) for d in csv.DictReader(open('file.csv'))]

查看此小提琴以获取工作示例: https://pyfiddle.io/fiddle/5992b8f4-552f-4970-91b6-a52cdee16ebc/?i=true

【讨论】:

这种方法使我的 numeric value(int, float) 每个键为 string。有什么办法解决这个问题?

以上是关于如何在python中将csv转换为json?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 php 中将 Json 转换为 CSV

如何在 HugSQL 结果中将返回的地图转换为 json csv

在 Python 中将嵌套的 JSON 转换为 CSV 文件

如何在 Python 中将多个 .txt 文件转换为 .csv 文件

如何在 Python 中将 Azure Blob 文件 CSV 转换为 Excel

如何在 python 中将 CSV 表转换为 COCO 格式?