2016-03-23 11 views
3

У меня проблема с памятью в python «Ошибка памяти Python». На самом деле, я пытаюсь восстановить данные из большого .bson файла, используя этот скрипт:Ошибка памяти Python с f.read

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

сообщение об ошибке:

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

спасибо за любую помощь вы можете предоставить

+4

Насколько велика файл? Я предполагаю, что это большой файл (больше, чем доступная память вашей системы)? Прямо сейчас вы читаете * все * файла в памяти * дважды * (один раз для необработанных данных и один раз для декодированных данных). – Carpetsmoker

+0

Вы можете сканировать строку после строки, если файл слишком большой: 'для строки в 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

Спасибо, что все в порядке. –