python如何操作bson文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python如何操作bson文件相关的知识,希望对你有一定的参考价值。

bson是MongoDB专用的格式,所以应该使用Python的MongoDB驱动。 参考技术A 看GitHub bson文档

Python,将 mongodump 的 bson 输出转换为 json 对象数组(字典)

【中文标题】Python,将 mongodump 的 bson 输出转换为 json 对象数组(字典)【英文标题】:Python, Convert bson output of mongodump to array of json objects (dictionaries) 【发布时间】:2016-03-23 01:41:51 【问题描述】:

我已经使用 mongodump 命令转储了一个 mongodb 集合。输出是一个包含以下文件的转储目录:

dump/
    |___coll.bson
    |___coll.metadata.json

如何将导出的文件打开到在 python 中工作的字典数组? 我尝试了以下方法,但均未奏效:

with open('dump/coll.bson', 'rb') as f:
    coll_raw = f.read()
import json
coll = json.loads(coll_raw)

# Using pymongo
from bson.json_util import loads
coll = loads(coll_raw)

ValueError: No JSON object could be decoded

【问题讨论】:

【参考方案1】:

你应该试试:

from bson import BSON
with open('dump/coll.bson', 'rb') as f:
    coll_raw = f.read()

coll = bson.decode_all(coll_raw) 

【讨论】:

这可能意味着你的 BSON 不正确,你能把你试图解码的示例 BSON 对象发给我吗? bson 文件是我使用mongodump 得到的转储文件。文件很大。让我看看我是否可以用一个小数据库复制错误。 你试过运行BSON.is_valid(coll_row)吗? @YashMehrotra 这是文件:dropbox.com/s/6yyssja0la0ctln/dump.zip?dl=0 mongodump 的直接输出 @Quirk object 'BSON' has no attribute 'is_valid'【参考方案2】:

我知道这个问题很久以前就已经回答过了,但是您可以尝试分别解码每个文档,然后您就会知道是哪个文档导致了问题。

我使用这个库:https://github.com/bauman/python-bson-streaming

from bsonstream import KeyValueBSONInput
f = open("restaurants.bson", 'rb')
stream = KeyValueBSONInput(fh=f)
for dict_data in stream:
    print dict_data
f.close()

我看到 25359 条记录似乎都解码为:

u'_id': ObjectId('5671bb2e111bb7b9a7ce4d9a'),
 u'address': u'building': u'351',
              u'coord': [-73.98513559999999, 40.7676919],
              u'street': u'West   57 Street',
              u'zipcode': u'10019',
 u'borough': u'Manhattan',
 u'cuisine': u'Irish',
 u'grades': [u'date': datetime.datetime(2014, 9, 6, 0, 0),
              u'grade': u'A',
              u'score': 2,
             u'date': datetime.datetime(2013, 7, 22, 0, 0),
              u'grade': u'A',
              u'score': 11,
             u'date': datetime.datetime(2012, 7, 31, 0, 0),
              u'grade': u'A',
              u'score': 12,
             u'date': datetime.datetime(2011, 12, 29, 0, 0),
              u'grade': u'A',
              u'score': 12],
 u'name': u'Dj Reynolds Pub And Restaurant',
 u'restaurant_id': u'30191841'

【讨论】:

以上是关于python如何操作bson文件的主要内容,如果未能解决你的问题,请参考以下文章

在 python/pymongo 中将 bson 转换为 json

使用 pymongo 将自定义 python 对象编码为 BSON

读取bson文件——JavaScript读取/解析bson文件并存至txt文件

python 在pymongo的bson.objectid,没有依赖,独立工作

Pymongo/bson:将 python.cursor.Cursor 对象转换为可序列化/JSON 对象

如何使用 Python 将 MongoDB 的 bsondump 转换为 JSON?