所以。。。问题是csv编写器不理解mongo返回的“子字典”的概念。

如果我理解正确,当你查询Mongo时,你会得到这样一本字典:{

"_id": "a hex ID that correspond with the record that contains several answers",

"answers": [ ... a list with a bunch of dicts in it... ]

}

因此,当csv.DictWriter试图编写它时,它只编写了一个字典(最上面的)。它不知道(也不关心)answers是一个包含字典的列表,这些字典的值也需要写在列中(使用诸如answers.order这样的点符号访问字典中的字段只被Mongo理解,而不是csv编写器)

我知道你应该做的是“浏览”答案列表,并从列表中的每个记录(每个字典)中创建一个字典。一旦您有了一个“platten”字典列表,您就可以传递这些字典并将它们写入您的csv文件中:cursor = client.stack_overflow.stack_039.find(

{}, {'_id': 1, 'answers.order': 1, 'answers.text': 1, 'answers.answerId': 1})

# Step 1: Create the list of dictionaries (one dictionary per entry in the `answers` list)

flattened_records = []

for answers_record in cursor:

answers_record_id = answers_record['_id']

for answer_record in answers_record['answers']:

flattened_record = {

'_id': answers_record_id,

'answers.order': answer_record['order'],

'answers.text': answer_record['text'],

'answers.answerId': answer_record['answerId']

}

flattened_records.append(flattened_record)

# Step 2: Iterate through the list of flattened records and write them to the csv file

with open('stack_039.csv', 'w') as outfile:

fields = ['_id', 'answers.order', 'answers.text', 'answers.answerId']

write = csv.DictWriter(outfile, fieldnames=fields)

write.writeheader()

for flattened_record in flattened_records:

write.writerow(flattened_record)

复数的用法。answers_record与answer_record不同

创建如下文件:$ cat ./stack_039.csv

_id,answers.order,answers.text,answers.answerId

580f9aa82de54705a2520833,0,{u'en': u'Yes'},527d65de7563dd0fb98fa28c

580f9aa82de54705a2520833,1,{u'en': u'No'},527d65de7563dd0fb98fa28b

编辑:

您的查询(生成cursor = db.questions.find ({},{'_id':1, 'answers.order':1, 'answers.text':1, 'answers.answerId':1})的查询)将返回questions集合中的所有条目。如果此集合非常大,则可能需要将cursor用作iterator。

正如您可能已经意识到的,上面代码中的第一个for循环将所有记录放在一个列表中(即flattened_records列表)。您可以通过遍历cursor来执行延迟加载(而不是加载内存中的所有项,取回一个项,对它执行某些操作,获取下一个项,对它执行某些操作…)。

速度稍慢,但内存效率更高。cursor = client.stack_overflow.stack_039.find(

{}, {'_id': 1, 'answers.order': 1, 'answers.text': 1, 'answers.answerId': 1})

with open('stack_039.csv', 'w') as outfile:

fields = ['_id', 'answers.order', 'answers.text', 'answers.answerId']

write = csv.DictWriter(outfile, fieldnames=fields)

write.writeheader()

for answers_record in cursor: # Here we are using 'cursor' as an iterator

answers_record_id = answers_record['_id']

for answer_record in answers_record['answers']:

flattened_record = {

'_id': answers_record_id,

'answers.order': answer_record['order'],

'answers.text': answer_record['text'],

'answers.answerId': answer_record['answerId']

}

write.writerow(flattened_record)

它将生成与上面所示相同的.csv文件。

python将mongodb导出_使用python从mongodb将数据导出到csv相关推荐

  1. python中级项目下载_中级Python复习:教程,项目思想和技巧

    python中级项目下载 本文旨在向Python初学者和开发人员介绍Python中使用的一些关键概念,这些概念一开始就没有讲授. 如果您可以创建二次方根求解器,则可以理解本文. 这些是我一天之内没有学 ...

  2. python大牛 关东升_《Python从小白到大牛》第4章 Python语法基础

    本章主要为大家介绍Python的一些语法,其中包括标识符.关键字.常量.变量.表达式.语句.注释.模块和包等内容. 标识符和关键字 任何一种计算机语言都离不开标识符和关键字,因此下面将详细介绍Pyth ...

  3. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  4. python读取第二行_使用Python操作Excel(二):读取数据表

    上一节我们提到,使用openpyxl可以方便的对数据表进行操作,例如:抽象Excel数据并存入数据库 将数据库数据导出到Excel 给一个已存在的数据表追加信息 我们还介绍了一些Excel的基本术语, ...

  5. python画交互式地图_使用Python构建交互式地图-入门指南

    python画交互式地图 Welcome to The Beginner's Guide to Building Interactive Maps in Python 欢迎使用Python构建交互式地 ...

  6. 用python做透视表_用Python实现数据的透视表的方法

    用Python实现数据的透视表的方法 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  用Python实现数据的透视表的方法.txt ] (友情提示:右键点上行tx ...

  7. python怎么爬虎牙_使用python爬虫框架scrapy抓取虎牙主播数据

    前言 本文利用python的scrapy框架对虎牙web端的主播.主播订阅数.主播当前观看人数等基本数据进行抓取,并将抓取到的数据以csv格数输出,以及存储到mongodb中 思路 观察虎牙网站后确认 ...

  8. python常用模块教程_盘点Python常用的模块和包

    模块 1.定义 计算机在开发过程中,代码越写越多,也就越难以维护,所以为了编写可维护的代码,我们会把函数进行分组,放在不同的文件里.在python里,一个.py文件就是一个模块. 2.优点: 提高代码 ...

  9. python出现的意义_[转]Python中下划线以及命名空间的意义

    Python 用下划线作为变量前缀和后缀指定特殊变量/方法. 主要存在四种情形 1. 1. object # public 2. __object__ # special, python system ...

  10. python pandas 读取数据库_数据分析-pandas从数据库读取数据

    数据分析-pandas从数据库读取数据 使用pandas读取数据到DataFrame,对于只是数据分析来说,重点是读取数据,读取数据过程越简单越好,并不需要写得很复杂显得自己很厉害的样子.最好就是代码 ...

最新文章

  1. python篮球-用Python让蔡徐坤在我的命令行里打篮球!|附完整代码
  2. IPSEC造成网络Destination host unreachable
  3. 用python解决实际问题_Python解决实际问题一--备份文件
  4. 项目中获取系统的用例的基本步骤
  5. 手机访问内网IIS服务器网页的方法
  6. cmd 查询ip 服务器信息,cmd查看ip(cmd查别人ip)
  7. 荣耀MagicBook X桌面频繁蓝屏如何重装系统?
  8. 南信院计算机应用专转本,2019年南京信息工程大学专转本招生计划
  9. 直播粉丝统计平台 抖音直播粉丝 如何查看直播间的粉丝人数 如何查看主播直播数据记录
  10. 51单片机+L298N控制步进电机【T型】加减速
  11. android接入支付宝自动续费,APP是如何实现自动续费的?
  12. 基于实践的LabVIEW零基础入门视频教程
  13. 操作系统 --cpu与指令集
  14. Idea2023安装教程
  15. java正则 环视_Java正则环视和反向引用功能与用法详解
  16. 关于 JavaScript 中 null 的一切
  17. 友盟推送集成的常见问题
  18. 海思AI芯片(Hi3519A/3559A)方案学习(四)如何在3519A板子上运行sample code
  19. iClap的名字是怎么来的,clap是有什么特殊的意义么?
  20. 互联网程序员和外包公司的程序员有什么区别?

热门文章

  1. [工作积累] error: bad class file magic (cafebabe) or version (0033.0000)
  2. request.getParameterValues与request.getParameter的区别
  3. FZU 2108 Mod problem
  4. 1.0Tensorflow中出现编译问题的解决方案
  5. 安装office2010出现了错误,提示要安装MSXML6.10.1129.0解决方法
  6. 2202知识图谱推荐系统,终终终于于于于于于于于于更新了
  7. 【报告分享】2020年中国知识图谱行业研究报告.pdf(附下载链接)
  8. error: numpy/arrayobject.h No such file or directory解决方法
  9. 解决vscode连接远程服务器remote-ssh连接不上的问题
  10. Pytorch实战从入门到精通第一部分——手写字符识别全流程