嵌套数据转换为CSV格式的Python代码

3

我有一个嵌套的JSON数据文件。我正在尝试获取“get.some_object”并使用对象(我认为它们被称为对象:“some_object”:“some_value”)编写CSV文件;我希望每个嵌套项组都有一行。这是我的代码:

import csv
import json

path = 'E:/Uni Arbeit/Prof Hayo/Sascha/Bill data/97/bills/hr/hr4242'

outputfile = open('TaxLaw1981.csv', 'w', newline='')                            
outputwriter = csv.writer(outputfile)

with open(path + "/" + "/data.json", "r") as f:
    data = json.load(f)

    for act in data['actions']:
        a = act.get('acted_at')
        b = act.get('text')
        c = act.get('type')

        outputwriter.writerow([a, b, c])
outputfile.close()       

我遇到的问题是,它只将最后一组数据写入CSV文件;但是当我运行时。
with open(path + "/" + "/data.json", "r") as f:
data = json.load(f)

for act in data['actions']:

    a = act.get('acted_at')
    b = act.get('text')
    c = act.get('type')
    print (a) 

所有的“a”值都被打印出了。

有什么建议吗?

2个回答

2

您需要刷新您的 输出写入器 才能将行写入文件,否则它将不断替换变量中的行并最终仅写入最后一个值。 只有在关闭文件时,writerow才有效,除非您刷新数据。

for act in data['actions']:
        a = act.get('acted_at')
        b = act.get('text')
        c = act.get('type')
        outputwriter.writerow([a, b, c])
        outputfile.flush()

非常抱歉,您需要进行 outputfile.flush() 操作,修改答案。 - ishaan
是的,这似乎是JSON读取失败,不确定。您确定该文件存在于该路径中,或者您已将权限从“r”更改为“w”吗? - ishaan
我认为这仍然是一个JSON文件的问题。看一下这个问题:https://dev59.com/YIrda4cB1Zd3GeqPSer9 - ishaan
不需要刷新。writerow 每次都会写入新行。 - mementum
@ishaan,这是一个JSON文件问题,我不知道为什么,但当我使用上面的代码后,第一次之后所有数据都从文件中被擦除了。然后我又重新下载了文件并使用了原始代码,现在它可以正常工作了。我不知道为什么或怎么回事。 - Collective Action
显示剩余4条评论

1

你发布的代码与你所拥有的文件完全兼容。

该文件(对于任何感兴趣的人)可通过以下方式获取:rsync -avz --delete --delete-excluded --exclude **/text-versions/ govtrack.us::govtrackdata/congress/97/bills/hr/hr4242 .

CSV文件的输出结果为(中间省略了一些行)

1981-07-23,Referred to House Committee on Ways and Means.,referral
1981-07-23,"Consideration and Mark-up Session Held by Committee on Ways and Means Prior to Introduction (Jun 10, 81 through Jul 23, 81).",action
1981-07-23,"Hearings Held by House Committee on Ways and Means Prior to Introduction (Feb 24, 25, Mar 3, 4, 5, 24, 25, 26, 27, 30, 31, Apr 1, 2, 3, 7, 81).",action
...
...
...
1981-08-12,Measure Signed in Senate.,action
1981-08-12,Presented to President.,topresident
1981-08-13,Signed by President.,signed
1981-08-13,Became Public Law No: 97-34.,enacted

当您执行代码时遇到错误(可能是由于编码错误),您应该发布完整的错误代码,以便让其他人了解您的代码失败的原因。

由于某种原因,我的代码中的某些内容会擦除整个文件,因此当我运行代码两次时,就没有可运行的代码了。现在我只使用了原始代码,它可以正常工作。这对我来说太奇怪了,无法理解。 - Collective Action
如你在评论中提到的那样,将“r”替换为“w”可能会有所帮助。 - mementum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接