2016-03-23 63 views
3

我在python「Python內存錯誤」中遇到內存問題。事實上,我嘗試使用這個腳本從大.bson文件恢復數據:f.read Python內存錯誤

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

錯誤消息:

data = bson.decode_all(f.read()) 
MemoryError 

感謝您的幫助,您可以提供

+4

多大的文件?我猜這是一個大文件(大於系統的可用內存)?現在你正在讀取內存中*全部*文件*兩次*(一次是原始數據,一次是解碼數據)。 – Carpetsmoker

+0

如果文件太大,可以逐行掃描:'for line in f' – Matthias

+0

非常感謝您的支持。 –

回答

1

可以減少內存通過切換到decode_file_iter消費,其中1)需要一個文件(不是它的內容)作爲輸入,並且2)返回一個生成器。

0

我使用這個庫:https://github.com/bauman/python-bson-streaming

from bsonstream import KeyValueBSONInput 
f = open("xxxx.bson", 'rb') 
stream = KeyValueBSONInput(fh=f) 
for dict_data in stream: 
    print dict_data 
f.close() 
+0

非常感謝您的支持。 –