2
我習慣於使用JSON和Numpy在python中存儲數組,列表和字典,但是我想使用BSON,因爲浮點數只佔用4個字節,因此減少文件大小。在Python中使用BSON將浮點數組序列化/反序列化爲二進制文件
使用JSON,我做了以下內容:
import numpy
import json
a = numpy.random.rand(12).reshape((3,4))
with open('out.json', 'w') as out:
json.dump(a.tolist(), out)
with open('out.json') as inp:
b = numpy.array(json.load(inp))
print b
我沒有找到一個明顯的方式做同樣的BSON。我嘗試這樣做:
import numpy
from bson import BSON
a = numpy.random.rand(12).reshape((3,4))
b = BSON.encode({'a': a.tolist()})
with open('out.bson', 'wb') as out:
out.write(b)
with open('out.bson', 'rb') as inp:
print BSON().decode(inp.read())
但得到這個錯誤:
Traceback (most recent call last):
File "apaga.py", line 12, in <module>
print BSON().decode(inp.read())
File "/usr/lib/python2.7/dist-packages/bson/__init__.py", line 539, in decode
(document, _) = _bson_to_dict(self, as_class, tz_aware)
bson.errors.InvalidBSON: not enough data for a BSON document
它甚至沒有工作,因爲BSON模塊沒有'dumps'功能。 – heltonbiker
@heltonbiker:實際上,如果使用正確版本的bson,它確實有效。我發現DrSkippy的代碼與bson-0.3.3一起工作。 – mhawke
好的,我看到了...無論如何,我很容易修改bson.SON對象以從對象字符串和相反的對象獲取二進制表示。 – heltonbiker