2017-07-18 99 views
0

我試圖使用Python將數據從Mongodb導出到csv。我收到錯誤: 「類型錯誤:只能加入一個可迭代」使用python將數據導出到csv時出現錯誤

MongoDB的數據樣本:

{ "_id" : ObjectId("51dc52fec0d988a9547b5201"), 
    "hiringManagerIds" : [ 
     "529f5ad1030dedd0a88ed7be", 
     "529f5ad1030dedd0a88ed7bf" 
    ] 
    } 

Python腳本:

import codecs 
import csv 
cursor = db.jobs.find({}, {'_id': 1, 'hiringManagerIds': 1}) 
with codecs.open('jobs_array.csv', 'w', encoding ='utf-8') as outfile: 
    fields = ['_id', 'hiringManagerIds']  
    write = csv.writer(outfile) 
    write.writerow(fields) 
    for x in cursor: 
     write.writerow((x["_id"], u','.join(x.get('hiringManagerIds')))) 

錯誤信息:

Traceback (most recent call last): 
File "<stdin>", line 6, in <module> 
TypeError: can only join an iterable 

我想要刪除u字母,所以我在腳本中使用u.join。 hiringManagerIds文件在某些​​文檔中丟失,所以我使用get。如果我不添加u''加入腳本,它可以工作,但它會在csv文件中帶來u字母。我嘗試了很多不同的方式,但沒有奏效。感謝您的幫助。謝謝。

+0

什麼'打印x.get( 'hiringManagerIds')'嗎? – inspectorG4dget

+0

此代碼不會運行:第一個塊最後一行的縮進不正確? –

+0

它給出了hiringmanagerids的值:[u'529f5ad1030dedd0a88ed7be',u'529f5ad1030dedd0a88ed7bf'] 謝謝 – user7070824

回答

1

該錯誤源於沒有hiringManagerIds的文檔之一。如果這是未定義的,那麼目前你的代碼返回None到join方法中,這需要一個迭代(None不是一個可迭代的)。

您應該檢查是否關鍵是存在於詞典第一:

if 'hiringManagerIds' in x.keys(): 
    write.writerow((x["_id"], u','.join(x.get('hiringManagerIds')))) 
else: 
    write.writerow((x["_id"], ''))) 
+1

非常感謝。 @菲利普阿德勒。有效。它完美地消除了u字母。我喜歡你的解決方案。 – user7070824

相關問題