亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 CSV 文件轉換為 JSON 文件

將 CSV 文件轉換為 JSON 文件

胡說叔叔 2022-01-18 15:53:58
我正在嘗試將我的 CSV 文件轉換為 JSON 文件格式。當我這樣做時,JSON 文件中有一個額外的條目,它只包含字段名稱。我嘗試過使用熊貓、字典,但似乎無法得到結果。某事或其他事來了。我想在 JSON 開頭刪除額外的文件名條目。另外,我怎樣才能使 ConnectionId 作為鍵并為不同的輸出設置相同的格式。import csv, jsoncsvfile = open('/home/Desktop/PD/GEOSubscriberLocations_LTE_sample.csv', 'r')jsonfile = open('/home/Desktop/PD/script5.json', 'w')fieldnames = ("Confidence", "ConnectionId", "Imei", "Imsi", "IsData", "IsSignalling", "IsVoice", "Latitude", "Longitude",              "Mcc", "Mnc", "SegmentDuration", "SegmentStartTime", "ServingCellLabel", "Sv",               "TrackingAreaCode", "Uncertainity")reader = csv.DictReader(csvfile , fieldnames)code = ''for row in reader:    for key in row:        row[key] = row[key].decode('utf-8', 'ignore').encode('utf-8')        json.dump(row, jsonfile, indent=4, sort_keys=False)        jsonfile.write('\n')如果使用 ConnectionId 作為鍵,我希望我的輸出如下:{    "ConnectionId": "189970698469977",        {            "Confidence": "0.01428183",            "Imei": "99999507405260",            "Imsi": "999992226504812",            "IsData": "FALSE",            "IsSignalling": "TRUE",            "IsVoice": "FALSE",            "Latitude": "1.848613",            "Longitude": "1.354355",            "Mcc": "999",            "Mnc": "99",            "SegmentDuration": "00:00:00.0860000",            "SegmentStartTime": "16/02/2017 09:57:00.053",            "ServingCellLabel": "Cell14",            "Sv": "06",            "TrackingAreaCode": "1256",            "Uncertainty": 662        }
查看完整描述

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))

請同時參考此鏈接。


查看完整回答
反對 回復 2022-01-18
?
慕萊塢森

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))


查看完整回答
反對 回復 2022-01-18
  • 2 回答
  • 0 關注
  • 334 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號