2016-01-20 105 views
2

我有一個嵌套的json數據文件。我試圖「get.some_object」並寫入一個csv文件與對象(我認爲他們被稱爲對象:「some_object」:「some_value」);我想爲每組嵌套項目分配一行。這是我的代碼:將數據嵌套到csv python

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」值打印出來。

對此提出建議?

回答

1

您需要將您的輸出文件打包機寫入該文件,否則它將繼續替換變量中的一個並最終只寫入最後一個值。 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() 
+0

我想你的建議,並得到了以下錯誤: 回溯(最近通話最後一個): 文件「E:\解析參議院數據的.py統一Arbeit \ Hayo教授\薩沙\碼」 31行,在 outputwriter.flush() AttributeError:'_csv.writer'對象沒有屬性'flush' –

+0

所以對不起,你需要做一個outputfile.flush(),編輯答案。 – ishaan

+0

是的,這似乎是一個JSON閱讀失敗,不知道。你確定文件存在於路徑中,或者你是否已將權限從'r'更改爲'w'? – ishaan

1

您上面發佈的代碼與您擁有的文件一起工作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 

你應該張貼,當你執行你得到完整的錯誤代碼,讓別人理解你的代碼失敗的原因。

+0

出於某種原因,我的代碼中的某些內容正在擦除整個文件,所以當我運行代碼兩次時,沒有代碼可以運行它。我剛剛使用了我的原始代碼,並且它可以工作。對於我來說,這太奇怪了 –

+0

當你在其中一個評論中提到的時候交換'r'作爲'w'可能有幫助 – mementum