使用python将数据导出到csv时出错

时间:2017-07-18 18:32:52

标签: mongodb python-2.7 csv

我尝试使用Python将数据从Mongodb导出到csv。我收到错误:“TypeError:只能加入一个可迭代的”

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.join。某些文档中缺少hiringManagerIds字段,因此我使用get。如果我不添加你''。加入脚本,它可以工作,但它会带来你在csv文件中的字母。我尝试了很多不同的方法,但它没有用。感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:1)

错误源于其中一个没有hiringManagerIds的文档。如果未定义,则目前您的代码将None返回到join方法,这需要一个iterable(None不是可迭代的)。

您应首先检查字典中是否存在密钥:

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