【问题标题】:Nested data to csv python将数据嵌套到 csv python
【发布时间】:2016-04-26 03:11:57
【问题描述】:

我有一个嵌套的 json 数据文件。我正在尝试“get.some_object”并用这些对象编写一个csv文件(我认为它们被称为对象:“some_object”:“some_value”);我想为每组嵌套项设置一行。这是我的代码:

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”值都会打印出来。

建议?

【问题讨论】:

    标签: python json csv


    【解决方案1】:

    您需要刷新 outputwriter 以将行写入文件,否则它将继续替换变量中的行并最终只写入最后一个值。除非您刷新数据,否则 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()
    

    【讨论】:

    • 我尝试了您的建议并得到以下错误: Traceback(最近一次调用最后一次):文件“E:\Uni Arbeit\Prof Hayo\Sascha\code for parsing senate data .py”,第 31 行,在 outputwriter.flush() AttributeError: '_csv.writer' object has no attribute 'flush'
    • 很抱歉,你需要做一个 outputfile.flush() ,编辑答案。
    • 是的,这似乎是 json 读取失败,不确定。您确定该文件存在于路径中,还是您将权限从“r”更改为“w”?
    • 我将它从 "r" 更改为 "wb" 并得到错误 Traceback (最近一次调用最后): File "E:\Uni Arbeit\Prof Hayo\Sascha\code for parsing senate data 。 py”,第 10 行,在 中 data = json.load(f) 文件“C:\Python34\lib\json_init_.py”,第 265 行,在加载返回 load(fp.读取(),io.UnsupportedOperation:读取
    • 当我使用“r”时,我得到了一个很长的错误,我之前发布的那个已经被删除了。
    【解决方案2】:

    您在上面发布的代码 100% 适用于您拥有的文件。

    该文件(任何感兴趣的人)都可以通过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
    

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

    【讨论】:

    • 由于某种原因,我的代码中的某些内容正在擦除整个文件,因此当我运行代码两次时,没有代码可以运行它。我现在只是使用我的原始代码,它可以工作。这太离奇了,我无法理解
    • r 换成 w,正如您在其中一个 cmets 中提到的那样,可能会有所帮助
    猜你喜欢
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多