2014-12-17 3 views
6

BSON 형식의 몽고 덤프를 파이썬에서 읽고 데이터를 처리하고 싶습니다. 파이썬 bson package (필자는 pymongo 종속성보다는 사용하는 편이 좋음)을 사용하고 있지만 파일에서 읽는 방법은 설명하지 않습니다.파이썬에서 BSON 파일을 읽으시겠습니까?

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__' 

를하고있는 중이 야 무엇

이 내가 노력하고있어인가?

+0

는 bson.loads 파일을 기대하는 표시되지 않습니다. – njzk2

+0

('loads' 메소드의 문서에 명확하게 나와 있습니다.) – njzk2

답변

6

문서의 상태 :

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

당신은 문자열을 전달해야합니다. 예를 들어 :

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

loads은 파일이 아니라 문자열 ('의'가 의미하는 것)을 필요로합니다. 파일에서 읽은 다음 결과를 loads에게 전달하십시오.

3

나는 이것이 MongoDB를 2.4 BSON 파일과 파이썬의 'bson'모듈과 나를 위해 일한 발견이 몽고에 저장된 JSON 문서와 일치하는 사전의 목록을 반환

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

수집.

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'   
+0

하지만 승인 된 답변은 더 좋은 방법입니다 –

관련 문제