Read BSON file in Python?

loads expects a string (that's what the 's' stands for), not a file. Try reading from the file, and passing the result to loads.


I found this worked for me with a mongodb 2.4 BSON file and PyMongo's 'bson' module:

import bson
with open('survey.bson','rb') as f:
    data = bson.decode_all(f.read())

That returned a list of dictionaries matching the JSON documents stored in that mongo collection.

The f.read() data looks like this in a BSON:

>>> rawdata[:100]
'\x04\x01\x00\x00\x12_id\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02_type\x00\x07\x00\x00\x00simple\x00\tchanged\x00\xd0\xbb\xb2\x9eI\x01\x00\x00\tcreated\x00\xd0L\xdcfI\x01\x00\x00\x02description\x00\x14\x00\x00\x00testing the bu'        

The documentation states :

> help(bson.loads)
Given a BSON string, outputs a dict.

You need to pass a string. For example:

> b = bson.loads(bson_file.read())