Не получается получить ожидаемый результат в Python при преобразовании CSV в JSON

У меня есть файл Excel, в котором данные сохраняются в формате CSV таким образом. Эти данные присутствуют в файле Excel, как показано ниже, в столбце A (Файл CSV генерируется кодом программного обеспечения LabView, который я написал для генерации данных). Я также приложил изображение файла CSV для справки в конце моего вопроса.

RPM,Load Current,Battery Output,Power Capacity
1200,30,12,37
1600,88,18,55

Я хочу создать файл Json в таком формате

{  
   "power_capacity_data" :
   {
   "rpm" : ["1200","1600"],
   "load_curr" : ["30","88"],
   "batt_output" : ["12","18"],
   "power_cap" : ["37","55"]
   }
 }

Это мой код

import csv
import json 

def main():

    #created a dictionary so that i can append data to it afterwards

    power_data = {"rpm":[],"load_curr":[],"batt_output":[],"power_cap":[]}

    with open('power1.lvm') as f:
        reader = csv.reader(f)

        #trying to append the data of column "RPM" to dictionary
       rowcount = 0
       for row in reader:   
           if rowcount == 0:
               #trying to skip the first row
               rowcount = rowcount + 1 
           else:
               power_data['rpm'].append(row[0])
               print(row)

        json_report = {}        
        json_report['pwr_capacity_data'] = power_data
        with open('LVMJSON', "w") as f1:
            f1.write(json.dumps(json_report, sort_keys=False, indent=4, separators=(',', ': '),encoding="utf-8",ensure_ascii=False))
            f1.close()


 if __name__ == "__main__":
     main()

Выходной файл JSON, который я получаю, выглядит так:(пожалуйста, игнорируйте оператор print (row) в моем коде)

{
"pwr_capacity_data": 
  {
    "load_curr": [],
    "rpm": [
        "1200,30,12.62,37.88",
        "1600,88,18.62,55.88"
    ],
    "batt_output": [],
    "power_cap": []
  } 
}

Вся строка сохраняется в списке, но я просто хочу, чтобы значения в RPM столбца были сохранены. Может кто-нибудь помочь мне с тем, что я могу делать неправильно. Спасибо заранее. Я приложил изображение файла CSV на всякий случай, если это помогает

1 ответ

Вы могли бы использовать Python defaultdict чтобы сделать это немного проще. Также словарь для сопоставления всех значений заголовка.

from collections import defaultdict    
import csv
import json

power_data = defaultdict(list)

header_mappings = {
    'RPM' : 'rpm',
    'Load Current' : 'load_curr',
    'Battery Output' : 'batt_output',
    'Power Capacity' : 'power_cap'}

with open('power1.lvm', newline='') as f_input:
    csv_input = csv.DictReader(f_input)

    for row in csv_input:
        for key, value in row.items():
            power_data[header_mappings[key]].append(value)

with open('LVMJSON.json', 'w') as f_output:            
    json.dump({'power_capacity_data' : power_data}, f_output, indent=2)

Предоставление вам выходного файла JSON в виде:

{
  "power_capacity_data": {
    "batt_output": [
      "12",
      "18"
    ],
    "power_cap": [
      "37",
      "55"
    ],
    "load_curr": [
      "30",
      "88"
    ],
    "rpm": [
      "1200",
      "1600"
    ]
  }
}
Другие вопросы по тегам