BSON是一种类似于JSON的二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型等。

BSON主要被用作MongoDB数据库中的数据存储和网络传输格式,能用来表示简单数据结构、关联数组(MongoDB中称为“对象”或“文档”)以及MongoDB中的各种数据类型。

本文将讲述如何使用Python来读取MongoDB导出的BSON文件。

使用MongoDB导出BSON文件

使用Studio 3T软件查看数据库,其中testdb中的内容如下:

testdb数据库

我们使用Studio 3T软件的Export功能,将该数据库的内容以BSON格式导出,如下图:

导出BSON文件

导出文件成功后,我们解压压缩包,即可获得teacher.bson文件。

bson模块读取BSON文件

我们使用bson文件来读取teacher.bson文件,代码如下:

# -*- coding: utf-8 -*-
import bson
bson_file = open('teacher.bson', 'rb')
bson_data = bson.loads(bson_file.read())
print(bson_data)

输出结果如下:

{'_id': b'5f5f9304d18befbe1149fdba', 'name': 'zhanshan', 'age': 25}

代码只能读取BSON文件的第一个数据!这是什么原因呢?

查看bson.loads源代码,如下:

def loads(data):"""Given a BSON string, outputs a dict."""return decode_document(data, 0)[1]

在源代码中,我们发现该函数确实只返回了第一个数据。这样的结果不能让人满意。

那么解决办法是什么呢?

使用pymongo读取BSON文件

我们先安装pymongo模块,读取teacher.bson文件的代码如下:

# -*- coding: utf-8 -*-
import bson
bson_file = open('teacher.bson', 'rb')
bson_data = bson.decode_all(bson_file.read())
print(type(bson_data))
for data in bson_data:print(data)

输出结果如下:

<class 'list'>
{'_id': ObjectId('5f5f9304d18befbe1149fdba'), 'name': 'zhanshan', 'age': 25}
{'_id': ObjectId('5f5f9304d18befbe1149fdbb'), 'name': 'lisi', 'age': 36}
{'_id': ObjectId('5f5f9304d18befbe1149fdbc'), 'name': 'wangwu', 'age': 27}

现在我们已经读取了teacher.bson中的全部数据!

本文来自于笔者在工作中碰到的一个读取BSON文件的困惑,故记录于此。

更多阅读

程序运行慢?你怕是写的假 Python

让 Pandas DataFrame 性能飞升 40 倍

用 PyQt 打造具有专业外观的GUI(上)

特别推荐

程序员摸鱼指南

为你精选的硅谷极客资讯,

来自FLAG巨头开发者、技术、创投一手消息

点击下方阅读原文加入社区会员

Python之读取MongoDB导出的BSON文件相关推荐

  1. python 导出大量数据到excel_怎么在python中将大量数据导出到Excel文件

    怎么在python中将大量数据导出到Excel文件 发布时间:2021-01-16 11:09:40 来源:亿速云 阅读:76 作者:Leah 这期内容当中小编将会给大家带来有关怎么在python中将 ...

  2. c++读取txt文件中的数字_在Python中读取包中的数据文件的三种方式

    我们知道,写Python代码的时候,如果一个包(package)里面的一个模块要导入另一个模块,那么我们可以使用相对导入: 假设当前代码结构如下图所示: 其中test_1是一个包,在util.py里面 ...

  3. Python代码读取Excel(.xlsx)文件并保存JSON文件

    策划需求,要求统计所有xlsx文件中的数据.并将其统一处理归纳到一个文件中,方便阅读. 这时候Python相对C#来说,优势体现出来了.当然C#还是很强的,只是针对某些功能,选择合适的工具. 思路:读 ...

  4. python二进制文件 删除尾部数据_在Python中读取和切片二进制数据文件的最快方法...

    我有一个处理脚本,用于提取"uint16"类型的二进制数据文件,并一次以6400块的形式进行各种处理.该代码最初是用Matlab编写的,但由于分析代码是用 Python编写的,我们 ...

  5. python怎么读取excel-python如何读写excel文件

    python读写excel的方式有很多,不同的模块在读写的方法上稍有区别: 用xlrd和xlwt进行excel读写: 用openpyxl进行excel读写: 用pandas进行excel读写: 为了方 ...

  6. python读取sav文件_在Python中读取SPSS(.sav)文件时,获取“title already used as a name or title”错误...

    我正在读一个SPSS文件(.sav).我下面的代码可以读取.sav文件.但是,我遇到了一个非常奇怪的错误.当我试图读取另一个.sav文件时,它会给出以下错误Traceback (most recent ...

  7. python open读取_Python:open的文件读取操作,utf-8,UnicodeDecodeError

    简要目录: open函数 将文件设置为utf-8编码格式 UnicodeDecodeError f.read() 和 f.read(size) f.readline() 和 f.readlines() ...

  8. Python实现读取多个/批量txt文件合并成一个txt(示例为tcga数据处理)

    本程序功能 将tcga数据的批量txt文件合并成一个txt. 如下: 原始的第一个txt(代表一个病人)的数据内容 合并之后的txt数据,基因名不变,只是把病人的表达量收集到一起 操作详细步骤 本人测 ...

  9. python如何读取百万级的csv文件-Python如何读取数据量百万级的CSV文件数据?

    是时候安利我们的开源库:Mars.Mars DataFrame 可以用来加速 pandas 执行,即使在单机.而代码几乎无需改动. 以下代码都是在我的笔记本上跑的. 任务一:只读取 CSV 文件 pa ...

最新文章

  1. Markdown拾遗
  2. 网站的高性能架构--web前端优化
  3. 可视化应用实战案例:metacoder-相关进化树图的绘制
  4. 为什么操作系统会有随机性
  5. word List18
  6. php函数查询sprintf,PHPsprintf函数用例解析
  7. go数据结构与算法| 稀疏数组
  8. 编写python代码估算sin(x)的值
  9. QFileInfoList
  10. 小米回应“米家”商标争议;人人 App 回归社交市场;TiDB 2.1.19 发布| 极客头条...
  11. HDU2024 C语言合法标识符【文本处理】
  12. Host localhost is not allowed to connect to mysql server解决方法
  13. 电脑是个神奇的东西!
  14. 十月第一周学习进度条
  15. grid 安装失败 卸载grid 实操
  16. 职称计算机word中文字处理,职称计算机Word2003中文字处理考试大纲
  17. 携程一面(2021-1-26):凉经。面试职位:后台开发工程师(2021届应届生)
  18. android播放3gp格式,Android – 无法播放任何视频(mp4 / mov / 3gp /等)?
  19. 攻克弹唱第七课(如何弹奏neon)
  20. Android最全的屏幕适配

热门文章

  1. 空间,线性空间,赋范空间,内积空间和希尔伯特空间的区别
  2. 微信企业号(公众号)开发流程汇总
  3. 【关于听任大佬的讲话的深刻感悟】
  4. Java二维码生成工具类
  5. Thinkphp6 Malformed UTF-8 characters, possibly incorrectly encoded in
  6. Java模拟登录强智教务系统分析思路
  7. unity获取android内存大小,使用SystemInfo类获取Unity3D运行设备的各类信息(CPU类型,显卡类型等)...
  8. 红孩儿编辑器模块设计7
  9. docker-compose 部署shipyard
  10. 公司app上架正规要求需要办理icp许可证