Carregar um arquivo de 41MB por ast.literal_eval causa MemoryError

Como analisar um arquivo grande usando ast.literal_eval sem causar MemoryError? Por exemplo, o arquivo que desejo analisar é de 41 MB.

Eu assisti o processo e descobri que o python consumia mais do que memória 3G. Estou usando um sistema de 32 bits, então depende da memória máxima do processo.

Por que ast.literal_eval consome tanta memória quanto apenas analisa para obter a estrutura de dados? Existe alguma maneira de reduzir o uso de memória?

A propósito, o código é:

import ast
file = open(file_name, 'r')
data = ast.literal_eval(file.read())
file.close()

a exceção é

  File "/usr/local/lib/python2.7/ast.py", line 49, in literal_eval
    node_or_string = parse(node_or_string, mode='eval')
  File "/usr/local/lib/python2.7/ast.py", line 37, in parse
    return compile(source, filename, mode, PyCF_ONLY_AST)
MemoryError

Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion