2016-11-01 4 views
3

Ich habe eine nicht so große Textdatei (~ 220MB), so ist es viel weniger als die Gesamtmenge meines RAM (12 GB) und sogar 2 GB Grenze für 32bit Prozess auf meinem 64bit Windows7.Python lesen() löst MemoryError während readlines() funktioniert

Dieser einfache Code wirft Memory und ich verstehe nicht, warum:

f_in = open (r"my_txt_file_220Mb.txt", 'r', encoding = 'utf8') 
txt = f_in.read() 

Seltsam, aber nur dieser Code funktioniert:

txt = ''.join (f_in.readlines()) 

Ich dachte, dass es das Äquivalent ist. Was ist der Grund für MemoryError?

Ich benutze 32 Bit Python 3.4.2.

+1

können Sie die Traceback-Funktion buchen? klingt in der Tat seltsam. –

+0

'Traceback (jüngste Aufforderung zuletzt):' ' File "1.10 read.py", Linie 2, in ' ' txt = f_in.read()' ' MemoryError' Das ist alles. –

+0

In Ihrem zweiten Beispiel versuchen Sie, etwas mit 'txt' Variable zu tun - zumindest drucken Sie die Länge. Und dann sagen Sie uns, ob es mit OOM fehlschlägt oder nicht. – baldr

Antwort

-2

Readline wird die Datei Zeile für Zeile geladen, während Read die gesamte Datei lädt.

Ich würde vorschlagen, nur eine for line in file Schleife zu verwenden.

+0

Das setzt voraus, dass er tatsächlich 'readline', nicht' readlines' nennt, wie in der Frage erwähnt. – chepner

+0

Danke, aber ich frage nicht nach Lösung oder Workaround, ich versuche das Problem mit read() zu verstehen. –