[英]Python turning CSV to JSON with headers
我正在嘗試使用python從CSV創建JSON。 我遇到的這個問題是一種將標頭與數據分離的方法。 我當前的代碼是:
import csv
import json
with open('input.csv') as f:
columns = ("Column 1", "Column 2")
reader = csv.DictReader(f, columns)
rows = list(reader)
with open('output.json', 'w') as f:
json.dump(rows, f, indent=4)
但這又回來了
[
{
"Column 2": null,
"Column 1": "Title"
},
{
"Column 2": " data2",
"Column 1": "data1"
},
{
"Column 2": " data4",
"Column 1": "data3"
},
{
"Column 2": " data6",
"Column 1": "data5"
}
]
代替
[
"Title1": {
{
"Column 2": " data2",
"Column 1": "data1"
},
{
"Column 2": " data4",
"Column 1": "data3"
},
{
"Column 2": " data6",
"Column 1": "data5"
}
}
]
以下是CSV可供參考的示例:
Title
data1, data2
data3, data4
data5, data6
Title2
data1, data2
data3, data4
data5, data6
您需要向您的數據發送消息,使其讀入其他結構。
就像是:
data={}
with open('/tmp/f.csv') as f:
reader=csv.reader(f)
for sl in (row for row in reader):
if len(sl)==1:
key=sl[0]
data[key]=[]
else:
data[key].append({"Column {}".format(i):e for i, e in enumerate(sl,1)})
>>> json.dumps(data, f, indent=4)
{
"Title2": [
{
"Column 2": " data2",
"Column 1": "data1"
},
{
"Column 2": " data4",
"Column 1": "data3"
},
{
"Column 2": " data6",
"Column 1": "data5"
}
],
"Title": [
{
"Column 2": " data2",
"Column 1": "data1"
},
{
"Column 2": " data4",
"Column 1": "data3"
},
{
"Column 2": " data6",
"Column 1": "data5"
}
]
}
您不僅需要使用list
,還需要自己構建嵌套的數據結構。 這是您可以做到的一種方法:
import csv
import json
with open('input.csv') as f:
columns = ("Column 1", "Column 2")
reader = csv.DictReader(f, columns)
tree = {}
for row in reader:
if row["Column 2"] is None:
current = []
tree[row["Column 1"]] = current
else:
current.append(row)
當找到“標題”行(第二列為空)時,新列表將添加到樹中。 進一步的行將添加到該列表,直到出現另一個“標題”行,並開始一個新列表。
你能做這樣的事情嗎?
titles = ['Title', 'Title2']
output = {}
for line in f:
if line[0] in titles:
title = line[0]
output[title] = {}
output[title]["Column 1"] = []
output[title]["Column 2"] = []
else:
output[title]["Column 1"].append(line[0])
output[title]["Column 2"].append(line[1])
返回:
{ 'Title': { 'Column 1': ['data1', 'data3', 'data5'],
'Column 2': ['data2', 'data4', 'data6']},
'Title2': { 'Column 1': ['data1', 'data3', 'data5'],
'Column 2': ['data2', 'data4', 'data6']}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.