Читать файл BSON в Python?
Я хочу прочитать дамп Mongo формата BSON в Python и обработать данные. Я использую Python пакет bson (который я бы предпочел использовать, а не иметь зависимость pymongo), но он не объясняет, как читать из файла.
это то, что я пытаюсь:
bson_file = open('statistics.bson', 'rb')
b = bson.loads(bson_file)
print b[0]
а я:
Traceback (most recent call last):
File "test.py", line 11, in <module>
b = bson.loads(bson_file)
File "/Library/Python/2.7/site-packages/bson/__init__.py", line 75, in loads
return decode_document(data, 0)[1]
File "/Library/Python/2.7/site-packages/bson/codec.py", line 235, in decode_document
length = struct.unpack("<i", data[base:base + 4])[0]
TypeError: 'file' object has no attribute '__getitem__'
что я делаю не так?
3 ответов
в документации :
> help(bson.loads)
Given a BSON string, outputs a dict.
вам нужно передать строку. Например:
> b = bson.loads(bson_file.read())
я обнаружил, что это сработало для меня с файлом mongodb 2.4 BSON и модулем "BSON" python:
import bson
with open('survey.bson','rb') as f:
data = bson.decode_all(f.read())
это вернуло список словарей, соответствующих документам JSON, хранящимся в этой коллекции mongo.
f.данные read () выглядят так в 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'
loads
ожидает строку (это то, что означает "s"), а не файл. Попробуйте прочитать из файла и передать результат в loads
.