我正在尝试将JSON文件转换为CSV格式如下:
我正在使用json和csv模块,我当前的解决方案读取json文件,吐出唯一的标题(a,b,c,d,...) 将插槽与标题匹配 但是还没有写csv。
我的主要问题是尝试转换类似的内容: 库存,A,B,... slot1 a,b,... 如果实体包含它,则为0和1值
还涉及很多for循环,我不确定这是最佳实践: 嵌套for循环以获取所有标头, 循环遍历json文件, 编写csv文件
tl; dr问题是: 将“库存项目”列表从每个插槽的JSON转换为CSV中的0和1 我也希望它可以用于增加库存(可能是e,f,g,h,......)超过4个插槽等 所以我试图避免任何硬编码的行和列
第一次使用stackoverflow,谢谢!
equip_inventory.json
Window
预期输出CSV
Window {
id: myWindow
//...
MouseArea {
anchors.fill: parent
onClicked: WindowGrabber.grab(myWindow, path) //singleton type
}
}
答案 0 :(得分:1)
如果您习惯使用第三方库,可以使用pandas.get_dummies
:
import pandas as pd
d = {"slot1": ["a", "b"],
"slot2": ["c", "d"],
"slot3": ["a", "b", "c"],
"slot4": ["d"]}
df = pd.DataFrame([[d[i]] for i in d], index=d.keys())
dummies = pd.get_dummies(df[0].apply(pd.Series).stack()).sum(level=0)
df = df.join(dummies)\
.drop(0, axis=1)\
.rename_axis('inventory')\
.reset_index()
df.to_csv('file.csv', index=False)
结果:
print(df)
inventory a b c d
0 slot1 1 1 0 0
1 slot2 0 0 1 1
2 slot3 1 1 1 0
3 slot4 0 0 0 1
答案 1 :(得分:1)
我们可以在没有熊猫的情况下这样做
import json
import csv
with open('output.csv', 'w') as csvfile, open('sample.json') as jsonfile:
data = json.load(jsonfile)
for key, value in data.items():
writer = csv.writer(csvfile, delimiter=',')
writer.writerow([
key,
1 if 'a' in value else 0,
1 if 'b' in value else 0,
1 if 'c' in value else 0,
1 if 'd' in value else 0]
)