Python 如何将CSV转换为JSON?

Python 如何将CSV转换为JSON?,python,json,csv,dictionary,Python,Json,Csv,Dictionary,我有一个CSV文件,标题作为键,数据作为值。我的目标是将CSV文件转换为Json以上载到数据库并输出我上载的数据。我已成功地将CSV转换为Json,但我的输出有问题 我现在拥有的 import csv import json import pandas as pd csvfile = open ('so-emissions-by-world-region-in-million-tonnes.csv','r') reader = csv.DictReader(csvfile) result = [

我有一个CSV文件,标题作为键,数据作为值。我的目标是将CSV文件转换为Json以上载到数据库并输出我上载的数据。我已成功地将CSV转换为Json,但我的输出有问题

我现在拥有的

import csv
import json
import pandas as pd
csvfile = open ('so-emissions-by-world-region-in-million-tonnes.csv','r')
reader = csv.DictReader(csvfile)
result = []
for row in reader:
    result.append(row)
result = json.dumps(result)
result = json.loads(result)
keys = ('Entity' ,'Year','SO2 emissions- Clio Infra')
print(result)
CSV数据:

[{'502排放量-Clio Infra':'0','Entity':'Africa','Year':'1860'},
{'502排放量-Clio Infra':'0','实体':'非洲','年份':'1870'},
{'502排放量-Clio Infra':'0.059','实体':'非洲','年份':'1880'},
{'502排放量-Clio Infra':'0.065','Entity':'Africa','Year':'1890'},
{'502排放量-Clio Infra':'0.071','Entity':'Africa','Year':'1900'},
{'502排放量-Clio Infra':'0.146','Entity':'Africa','Year':'1910'},
{'502排放量-Clio Infra':'0.372','Entity':'Africa','Year':'1920'},
{'502排放量-Clio Infra':'0.41','Entity':'Africa','Year':'1930'},
{'502排放量-Clio Infra':'0.56','Entity':'Africa','Year':'1940'}]

正确输出:

“第一把钥匙”
值1
价值2
价值3
...
“第二把钥匙”
值1
价值2
价值3
...
“第三把钥匙”
值1
价值2
价值3
...

您可以使用
csv.DictReader
读取csv,然后使用
json.dumps
序列化其输出

import csv
import json

data = []
with open('file.csv') as f:
    for row in csv.DictReader(f):
        data.append(row)

json_data = json.dumps(data)

您当前正在打印结果,即字典本身,如果您希望以问题中所示的良好格式获得输出,则需要遍历字典以打印出每个键及其值

for key in keys:  #looking through each key
    print (key)
    for i in results:  #going through the results and printing the value of the index with the current key
        print (results[i][key])

这将在控制台中提供问题中提到的预期输出

如果在数据帧中加载数据,您可以尝试使用
.to_dict

df = pd.read_csv('so-emissions-by-world-region-in-million-tonnes.csv')
df.T.to_dict().values()
.to_dict()
将地图中的数据帧按列进行转换(对于每一列,都有索引->值)。通过转置并使用
.to_dict
,这是一个按行映射(对于每个索引,都有一个映射列->值)。您不需要密钥,只需使用
.values()

注意,如果您使用的是python 3.5,那么这是一个
dict_values
对象,因此在转换为json之前,您可能需要使用
list()

顺便说一下,您还可以使用
dict(zip(columns,values))
为每一行获取一个map column->value,这会更快。那样的话,你根本不需要熊猫


编辑:如果csv没有标题,您需要使用关键字
names=

将其传递到
pd.read\u csv()
中。我有一些类似于您建议的内容,但我无法按照需要的方式打印输出。所以我知道我不能用json_数据[“Key”]来打印>>“Value 1”。。。。。因为它不是tuple@AlexisChen
json\u数据
是一个字符串。。。如果要打印k-v对,您需要访问
数据[i]
。谢谢!我想:)我写了一个for循环来访问k-v对