Не получается получить ожидаемый результат в 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"
]
}
}