Das Laden der 41MB-Datei durch ast.literal_eval verursacht MemoryError

Wie kann ich eine große Datei mit ast.literal_eval analysieren, ohne MemoryError zu verursachen? Zum Beispiel ist die Datei, die ich analysieren möchte, 41 MB groß.

Ich habe den Vorgang beobachtet und festgestellt, dass Python mehr als 3G-Speicher benötigt. Ich verwende ein 32-Bit-System, daher hängt es vom maximalen Arbeitsspeicher des Prozesses ab.

Warum nimmt ast.literal_eval so viel Speicher in Anspruch, wie es nur analysiert, um die Datenstruktur zu erhalten? Gibt es eine Möglichkeit, die Speichernutzung zu reduzieren?

Der Code ist übrigens:

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

die ausnahme ist

  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

Vielen Dank!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage