我的結果:
[
{
"FIRST NAME": "JOHN",
"PRY SCHOOL": "OLIVETTE",
"HIGH SCHOOL": "BAPTIST",
"VEHICLEMAKE ": "TOYOTA",
"VEHICLE COL": "BLACK",
"TV MAKE": "SAMSUNG"
},
{
"FIRST NAME": "KOFI",
"PRY SCHOOL": "ACADAMY",
"HIGH SCHOOL": "MAYFLOWER",
"VEHICLEMAKE ": "HONDA",
"VEHICLE COL": "YELLOW",
"TV MAKE": "TECHWOOD"
},
{
"FIRST NAME": "BISI",
"PRY SCHOOL": "IGBOBI",
"HIGH SCHOOL": "ANGUS",
"VEHICLEMAKE ": "HYUNDAI",
"VEHICLE COL": "BLUE",
"TV MAKE": "THERMOC"
}
]
預期結果:
[
{
"FIRST NAME": "JOHN",
"SCHOOL": {
"primary": "OLIVETTE",
"HIGH SCHOOL": "BAPTIST"
},
"VEHICLE": {
"MAKE": "TOYOTA",
"COL": "BLACK"
},
"TV MAKE": "SAMSUNG"
},
{
"FIRST NAME": "KOFI",
"SCHOOL": {
"primary": "ACADAMY",
"HIGH SCHOOL": "MAYFLOWER"
},
"VEHICLE": {
"MAKE": "HONDA",
"COL": "YELLOW"
},
"TV MAKE": "TECHWOOD"
},
{
"FIRST NAME": "BISI",
"SCHOOL": {
"primary": "IGBOBI",
"HIGH SCHOOL": "ANGUS"
},
"VEHICLE": {
"MAKE": "HYUNDAI",
"COL": "BLUE"
},
"TV MAKE": "THERMO"
}
]
我的代碼:
import csv
import json
filenames = 'csvfilepath.csv'
my_dic = []
with open(filenames, encoding='utf-8') as csv_file:
csv_reader = csv.DictReader(csv_file)
for row in csv_reader:
my_dic.append(row)
with open('jasonfilepath.json', 'w', encoding='utf-8') as file_object:
json.dump(my_dic, file_object ,indent = 4)
我的資料:
firstname PRY SCHOOL HIGH SCHOOL VEHICLEMAKE VEHICLECOL TVMAKE
JOHN OLIVETTE BAPTIST TOYOTA BLACK SAMSUNG
KOFI ACADAMY MAYFLOWER HONDA YELLOW TECHWOOD
BISI IGBOBI ANGUS HYUNDAI BLUE THERMO
注意:行數超過 1000 行
我想確保學校(包括小學和中學)和車輛(品牌和顏色)的嵌套結構
uj5u.com熱心網友回復:
DictReader無法讀取嵌套資料,您需要手動構建具有所需結構的字典。對于這種情況,我會使用 simple csv.reader。
代碼:
import csv
import json
with open(r"csvfilepath.csv", newline="") as inp_f, \
open(r"jsonfilepath.json", "w") as out_f:
reader = csv.reader(inp_f, delimiter="\t")
next(reader) # skip header
my_dic = []
for row in reader:
if len(row) >= 6: # skip rows which missing columns
my_dic.append({
"FIRST NAME": row[0],
"SCHOOL": {
"primary": row[1],
"HIGH SCHOOL": row[2]
},
"VEHICLE": {
"MAKE": row[3],
"COL": row[4]
},
"TV MAKE": row[5]
})
if my_dic: # if my_dic is not empty
json.dump(my_dic, out_f, indent=4)
uj5u.com熱心網友回復:
類似于下面的內容(您確定“TV MAKE”位置嗎?)
import json
data = [ { "FIRST NAME": "JOHN", "PRY SCHOOL": "OLIVETTE", "HIGH SCHOOL": "BAPTIST", "VEHICLEMAKE ": "TOYOTA", "VEHICLE COL": "BLACK", "TV MAKE": "SAMSUNG" }, { "FIRST NAME": "KOFI", "PRY SCHOOL": "ACADAMY", "HIGH SCHOOL": "MAYFLOWER", "VEHICLEMAKE ": "HONDA", "VEHICLE COL": "YELLOW", "TV MAKE": "TECHWOOD" }, { "FIRST NAME": "BISI", "PRY SCHOOL": "IGBOBI", "HIGH SCHOOL": "ANGUS", "VEHICLEMAKE ": "HYUNDAI", "VEHICLE COL": "BLUE", "TV MAKE": "THERMOC" } ]
new = [{'SCHOOL':{'PRIMARY':d['PRY SCHOOL'],'HIGH SCHOOL':d['HIGH SCHOOL']},'VEHICLE':{'MAKE':d['VEHICLEMAKE '],'COL':d['VEHICLE COL']},'FIRST NAME':d['FIRST NAME'],'TV MAKE':d['TV MAKE']} for d in data]
print(json.dumps(new,indent=4))
輸出
[
{
"SCHOOL": {
"PRIMARY": "OLIVETTE",
"HIGH SCHOOL": "BAPTIST"
},
"VEHICLE": {
"MAKE": "TOYOTA",
"COL": "BLACK"
},
"FIRST NAME": "JOHN",
"TV MAKE": "SAMSUNG"
},
{
"SCHOOL": {
"PRIMARY": "ACADAMY",
"HIGH SCHOOL": "MAYFLOWER"
},
"VEHICLE": {
"MAKE": "HONDA",
"COL": "YELLOW"
},
"FIRST NAME": "KOFI",
"TV MAKE": "TECHWOOD"
},
{
"SCHOOL": {
"PRIMARY": "IGBOBI",
"HIGH SCHOOL": "ANGUS"
},
"VEHICLE": {
"MAKE": "HYUNDAI",
"COL": "BLUE"
},
"FIRST NAME": "BISI",
"TV MAKE": "THERMOC"
}
]
uj5u.com熱心網友回復:
假設使用制表符分隔的輸入檔案,您可以在讀取輸入檔案時通過稍微修改邏輯來構建嵌套:
with open(filenames, encoding='utf-8') as csv_file:
csv_reader = csv.DictReader(csv_file, delimiter="\t")
for row in csv_reader:
my_dic.append({"FIRST NAME": row['firstname'],
"SCHOOL" : { "PRIMARY": row['PRY SCHOOL'],
"HIGH SCHOOL" : row['HIGH SCHOOL']},
"VEHICLE" : { "MAKE": row['VEHICLEMAKE'],
"COL": row['VEHICLECOL']},
"TV MAKE" : row["TVMAKE"]})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/333851.html
