2 回答

TA貢獻1906條經驗 獲得超10個贊
嘗試用for以下代碼替換您的循環:
arr = []
with open (csvFile) as f:
csvReader = csv.DictReader(f)
#print(csvReader)
for csvRow in csvReader:
arr.append(csvRow)
print(arr)
# write the data to a json file
with open(jsonFile, "w") as jsonFile:
jsonFile.write(json.dumps(arr, indent = 4))
請同時參考此鏈接。

TA貢獻1810條經驗 獲得超4個贊
額外的僅字段名稱條目
如果您明確提供字段名,csv將假定 .csv 文件的第一行是數據。如果省略 fieldnames 參數,它將假定 .csv 文件的第一行是帶有字段名稱的標題行:
fieldnames 參數是一個序列。如果省略 fieldnames,則文件 f 的第一行中的值將用作字段名。
看起來您的 .csv 文件有一個標題行,但您還明確提供了字段名,因此csv已將標題行作為數據讀取。要僅使用標題行中的字段名,請將您對 DictReader 的調用更改為:
csv.DictReader(csvfile) # notice no fieldnames parameter
使用某個字段作為鍵
首先考慮如何最好地在 JSON 中表示這一點,以及您試圖從該字段的索引中獲得什么,您給出的示例不是很有效的 JSON。
{
"ConnectionId": "189970698469977",
{
"Confidence": "0.01428183",
"Imei": "99999507405260",
...
}
它無效,因為:
我們打開一個{,表明這是一個“對象”
對象有鍵,以及與這些鍵關聯的值,沒有別的
我們為它提供一個鍵“ConnectionID”和一個值。這可以
然后我們提供另一個對象但沒有密鑰,這是無效的。
假設您希望能夠根據 connectionId 快速查找對象,我們如何在 JSON 中創建一個如下所示的對象:
{
"189970698469977": {
"Confidence": "0.01428183",
"Imei": "99999507405260",
...
},
"260339442647676": {
"Confidence": ...
},
...
}
這為我們提供了一種令人滿意的屬性,即 JSON 僅在鍵唯一時才有效。
為此,我們需要在 Python 中創建一個字典,我們將在 JSON 轉儲中表示:
我們可以從元組序列中創建 Python 字典(key, value)。文檔中的示例:
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'guido': 4127, 'jack': 4098}
我們將使用這個構造函數來創建我們的索引字典:
dictionaryEntries = [(row['ConnectionId'], row) for row in csvReader]
dictionaryToDump = dict(dictionaryEntries)
把它放在一起
您的代碼現在可能如下所示:
import csv
import json
with open('mycsv.csv') as csvFile:
csvReader = csv.DictReader(csvFile)
dictionaryEntries = [(row['ConnectionId'], row) for row in csvReader]
dictionaryToDump = dict(dictionaryEntries)
with open('myjson.json', 'w') as jsonFile:
jsonFile.write(json.dumps(dictionaryToDump))
添加回答
舉報