如何在Python中将JSON字符串保存为CSV或TXT?

时间:2015-03-09 10:51:17

标签: python json csv

在Python中如何将以下JSON字符串保存到CSV文件中?

{
'1.txt': [], 
'2.txt': [], 
'5.txt': [], 
'4.txt': ['3.txt','6.txt'],
'7.txt': ['8.txt']
}

重要的是,我只想保存那些有孩子的条目的数量,即对于上面的例子,结果将是:

4
3
6
7
8

这是我目前准备的,但我不知道如何检查嵌套元素:

    x = json.loads(data)

    f = csv.writer(open("test.csv", "wb+"))

    # Write CSV Header
    f.writerow(["number"])

    for x in x:
            f.writerow([x[...]])

2 个答案:

答案 0 :(得分:1)

只需检查列表是否为空或不重复dict中的项目:

for k, v in d.items(): 
    if v: # will be False for any empty list
        print(k.split(".")[0])
        print([s.split(".")[0] for s in v])
7
['8']
4
['3', '6']

取决于您想要的输出:

f = csv.writer(open("test.csv", "w")) 

# Write CSV Header
f.writerow(["name", "qty"])


for k, v in d.items(): # iteritems python2
    if v:
        f.writerow([k.split(".")[0]]+[s.split(".")[0] for s in v])

哪个输出:

name,qty
7,8
4,3,6

如果你想要所有人分开:

with open("test.csv","w") as f:
    f.write("name\n")
    for k, v in d.items():
        if v:
            f.write("{}\n".format(k.split(".")[0]))
            f.write("\n".join([s.split(".")[0] for s in v])+"\n"

输出:

name
7
8
4
3
6

要使用csv模块,您需要将子元素包装在列表或某个容器中:

with open("test.csv","w") as f:
    wr = csv.writer(f)
    wr.writerow(["name"])
    for k, v in d.items():
        if v:
            wr.writerow([k.split(".")[0]])
            wr.writerows([[s.split(".")[0]] for s in v])

答案 1 :(得分:0)

这应该有效:

data = {
    '1.txt': [], 
    '2.txt': [], 
    '5.txt': [], 
    '4.txt': ['3.txt','6.txt'],
    '7.txt': ['8.txt']
}
f = csv.writer(open("test.csv", "wb+"))
f.writerow(["name", "qty"])
for key, value in data.iteritems():
    if len(value) > 0:
        f.writerow([key, len(value)])