2014-09-25 2 views
1

Я хочу читать данные, хранящиеся в текстовом формате, в файле размером 5 ГБ. когда я пытаюсь прочитать содержимое файла, используя этот код:Python MemoryError при попытке загрузить текстовый файл 5 ГБ

file = open('../data/entries_en.txt', 'r') 
data = file.readlines() 

произошла ошибка: данных = file.readlines() MemoryError Мой ноутбук имеет 8 Гб памяти и по крайней мере 4 Гб пуст, когда я хочу запустить программу. но когда я контролирую производительность системы, когда python использует около 1,5 ГБ памяти, эта ошибка возникает.
Я использую python 2.7, но если это имеет значение, скажите мне решение для 2.x и 3.x Что мне делать, чтобы прочитать этот файл?

+0

Python версия? Кроме того, почему вы все это читаете сразу? Наконец, если вы действительно хотите это сделать, 'list (file)' более современен и «идиоматичен». – Veedrac

+1

Что такое ОС? 64-битный? или 32-бит? Является ли Python скомпилированным как 64-битный или 32-битный двоичный файл? –

ответ

3

Лучший способ для вас, чтобы обрабатывать большие файлы будет -

with open('../file.txt', 'r') as f: 
    for line in f: 
     # do stuff 

readlines() будет ошибка, потому что вы пытаетесь загрузить слишком большой файл непосредственно в память. Приведенный выше код автоматически закроет ваш файл после завершения обработки.

+0

Что делать, если у меня есть оперативная память 100 ГБ и вы хотите сделать 'readlines()'. Будет ли это еще не работать? Любой обходной путь? – hyades

+0

В зависимости от вашей операционной системы - не все операционные системы предоставят вам полный доступ ко всем моментум для каждого процесса. Я считаю, что 32-битный O/S ограничен 4 ГБ на процесс. Обработка на линию - или на «кусок», скорее всего, будет намного более эффективной. –

2

Если вы хотите обработать строки в файле, вы должны лучше использовать:

for line in file: 
    # do something with the line 

Он будет читать файл строка за строкой, а не читать все это в памяти сразу.

Смежные вопросы