2014-12-17 15 views
6

मैं पाइथन में एक बीएसओएन प्रारूप मोंगो डंप पढ़ना चाहता हूं और डेटा को संसाधित करना चाहता हूं। मैं पाइथन bson package (जिसे मैं एक पिमोंगो निर्भरता के बजाय उपयोग करना पसंद करूंगा) का उपयोग कर रहा हूं, लेकिन यह फ़ाइल से कैसे पढ़ा जाए, इसकी व्याख्या नहीं करता है।पायथन में बीएसओएन फ़ाइल पढ़ें?

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

(जैसा कि 'लोड' विधि के दस्तावेज़ीकरण में स्पष्ट रूप से इंगित किया गया है।) – 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' मॉड्यूल के साथ मेरे लिए काम किया:

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

है कि मोंगो में संग्रहीत JSON दस्तावेज़ मिलान शब्दकोशों की एक सूची लौटे संग्रह।

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

लेकिन स्वीकृत उत्तर जाने का एक बेहतर तरीका है –

संबंधित मुद्दे