2014-08-27 76 views
0

新手問題:我想寫一個函數來編寫一個csv文件的嵌套字典,所以我從堆棧溢出(Convert Nested Dictionary to CSV Table)拉了一些代碼,但我不斷收到錯誤消息那個「dict」是不可調用的。由於我不太瞭解代碼的哪一部分正在執行,因此很難排除故障。 有人可以請解釋並幫助我解決我的代碼?編寫一個嵌套字典到CSV文件

這裏是我的代碼:

def dict_to_csv(dict, txtFileName, destination_file): 

    with open(destination_file, 'wb') as f: 
     writer = csv.DictWriter(f, dict.keys()) 
     writer.writeheader() 
     for key, row in dict.iteritems(): 
      writer.writerow(dict(row, **{'': key})) #this is the row where I'm getting the error message 
    f.closed() 

預先感謝您的幫助!

下面是我正在使用的字典示例: {'20140524X21540':{'':'','業餘內置':'是','製作':'肯尼特阿伯格','位置':''電氣城市,華盛頓州'''全部未受傷':'','緯度':'','事件ID':'20140524X21540','機場名稱':'N/A','航空器類別' :'未知','調查類型':'事故','報告狀態':'初步','事件日期':'05/24/2014','總致命傷害':'1','國家': '美國','天氣狀況':'VMC','註冊號碼':'N249PW','事故號碼':'WPR14FA209','發動機數量':'','經度':'','空氣'機場代碼':'','型號':'SEAREY LSX','航程廣泛階段':'','發佈日期':'05/29/2014','FAR描述':'第91部分:通用航空','引擎類型':'','時間表':'','飛行目的':'個人','飛機損傷':'實質','損傷嚴重程度':'致命(1)','總小傷':'','20140529X73728':{'':'','業餘建造':'','' ''''ROBINSON HELICOPTER COMPANY','Location':''Chugiak,AK'','Total Unjured':'','Latitude':'61.477778','Event Id':'20140529X73728','Airport Name' :'','飛機類別':'直升機','調查類型':'事故','報告狀態':'初步','事件日期':'05/28/2014','致命傷害': '1','國家':'美國','天氣狀況':'VMC','註冊號碼':'N392GP','事故號碼':'ANC14FA030','發動機數量':'1' '經度':'-149.500833','航空公司':'','嚴重受傷':'','機場代碼':'','模型':'R44 II','飛行的廣泛階段':' '','發佈日期':'05/30/2014','FAR描述':'第133部分:旋翼機分機。負荷','引擎類型':'往復運動','進度表':'','飛行目的':'外部負荷','飛機損傷':'毀壞','受傷程度':'致命(1)' ,'Total Minor Injuries':''},'20140320X40839':{'':'','業餘構建':'否','製造':'CESSNA','Location':''夏洛茨維爾,弗吉尼亞州''' ,'全部未受傷':'1','緯度':'38 .139722','事件Id':'20140320X40839','機場名稱':'CHARLOTTESVILLE-ALBEMARLE','航空器類別':'飛機','調查類型':'事故','報告狀態':'可能的原因','事件日期':'03/08/2014','全部致命傷害':'','國家':'美國','天氣狀況':'VMC','註冊號':'N5423J','事故號碼':'ERA14CA160','發動機數量':'1','經度':'-78.452222','航空公司':'' '機場代碼':'CHO','Model':'172N','飛行的廣泛階段':'着陸','發佈日期':'05/05/2014' ,'FAR描述':'第91部分:通用航空','發動機類型':'往復式','時間表': '','飛行目的':'個人','飛機損傷':'實質','損傷嚴重程度':'非致命','總輕傷':''}}

+0

記住,如果這回答了你的問題請接受答案! – 2014-08-27 19:45:22

+0

很高興知道 - 謝謝! – sagaderisa 2014-08-27 20:21:02

回答

1

首先,不要使用像dict這樣的對象名稱作爲變量。該錯誤即將出現,因爲您正在嘗試call變量dict

在您提到的代碼中,dict(...)行的用途是將defaultdict轉換爲常規dict以防止無意中創建新密鑰。的dict(...)那種用法類似於代碼片段是這樣的:

a = [1,2,3,4,5] # list 
b = set(a) # conversion to set 

修復的方法是簡單的:改變你的變量名!

def dict_to_csv(my_dict, txtFileName, destination_file): 

    with open(destination_file, 'wb') as f: 
     writer = csv.DictWriter(f, my_dict.keys()) 
     writer.writeheader() 
     for key, row in my_dict.iteritems(): 
      writer.writerow(dict(row, **{'': key})) #this is the row where I'm getting the error message 
    f.closed() 
+0

我做了,但我仍然得到相同的錯誤。 – sagaderisa 2014-08-27 20:18:19

+0

@sagaderisa這很奇怪。你可以發表你正在使用的詞典樣本('my_dict')嗎? – 2014-08-27 20:57:43

+0

@sagaderisa另外,請確保您清理了錯誤引用「代碼」的代碼庫。 – 2014-08-27 20:58:19

1
import pandas as pd 
data = pd.DataFrame(dict) 
data.to_csv("./filename.csv") 
+3

請給你的答案補充一些補充。 – 2016-05-16 17:33:21