У меня есть файлы .json в следующем формате:
{
"uls":{
"equ1-L1-u": {"D": 1.10, "La": 1.50, "Lb": 1.50},
"equ1-L2-u": {"D": 1.10, "La": 1.50, "Lb": 1.50},
},
"sls":{
"cha-L1": {"Ld": 1.00, "Le": 1.00, "Lf": 1.00, "Lg": 1.00, "Lh": 1.00},
"cha-L2": {"D": 1.00, "Df": 1.00},
}
}
который я хочу преобразовать в формат стиля «базы данных» CSV:
Criteria, Name, D, Df, La, Lb, Ld, Le, Lf, Lg, Lh
uls, equ1-L1-u, 1.10, , 1.50, 1.50, , , , ,
uls, equ1-L2-u, 1.10, , 1.50, 1.50, , , , ,
sls, cha-L1, , , , ,1.00 , 1.00, 1.00, 1.00, 1.00
sls, cha-L2, 1.00, 1.00, , , , , , ,
В идеале мне не нужно было бы заранее определять ключи значений, но сейчас я могу сделать это при необходимости.
Вот что я теперь понял, это работает для этого конкретного случая 2-го уровня вложенности. Я могу заставить его работать на 3 или 4 уровнях вложенности, изменив код, но в идеале один и тот же код можно использовать для всех уровней вложенности (может быть, рекурсия?).
# Function to convert json objects to csv
import json
import csv
def make_csv_dict(data, key_headers):
csv_dict = []
for i in data:
for j in data:
csv_dict.append({
key_headers[0]: i,
key_headers[1]: j,
**data[j]
})
return csv_dict
### ENTER DATA HERE ###
key_headers = ["Criteria", "Name"]
path = "File.json"
### ENTER DATA HERE ###
# Read json
with open(path) as json_file:
data = json.load(json_file)
# make csv_dict from .json data
csv_dict = make_csv_dict(data, key_headers)
# writing to csv file
fieldnames = ["Criteria", "Name", "D", "Df", "La", "Lb", "Lc", "Ld", "Le", "Lf", "Lg", "Lh", "Sl", "Sh", "W", "T", "A", "E"]
with open(path.replace(".json",".csv"), 'w', newline="") as f:
writer = csv.DictWriter(f, fieldnames)
writer.writeheader()
writer.writerows(csv_dict)
Подробнее здесь: https://stackoverflow.com/questions/787 ... ile-to-csv
Обобщение случая преобразования файла .json в .csv ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как определить обобщение to_string и to_wstring, чтобы избежать дублирования кода
Anonymous » » в форуме C++ - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-