2017-03-17 2 views
-1

ich eine 16 GB Textdokument Datei mit folgendem Aufbau haben:Lesen Sie einen großen Textdokument in Python

name1 1 0 1 0 1 1 1 0 0 1 
... 
... 
nameN 1 1 1 0 1 0 -1 1 0 1 

Ich möchte in der Lage, die folgende Verarbeitung in die Datei zu tun:

my_dict = {} 

for line in data.split("\n"): 
    cells = line.split() 
    my_dict[cells[0]] = [int(x) for x in cells[1:]] 

das Problem ist, dass, wenn ich die Datei öffnen:

open(data) as f: 
    content = f.readlines() 

ich:

Objekt 'list' hat kein Attribut 'split'.

Gibt es eine Möglichkeit, die Datei zu öffnen, um die Lage sein, die obige Verarbeitung zu tun?

+0

Sind Sie sicher, dass Sie die gesamten 16 GB in ein "Dict" laden möchten? Dies erfordert mehr als 16 GB Arbeitsspeicher. Wenn ja, sollte Ananths Antwort Ihnen das erwartete Ergebnis geben. – Pit

Antwort

1

Dies liegt daran, f.readlines() gibt Ihnen eine Liste der Zeichenfolgen, die die Zeilen darstellen. Es tut schon die Spaltung von "\n", also, wenn Sie versuchen, die Verarbeitung zu tun, tut es ohne Spaltung durch das Newline-Zeichen:

my_dict = {} 

for line in content: 
    cells = line.split() 
    my_dict[cells[0]] = [int(x) for x in cells[1:]] 
2

die schönste Art und Weise zu tun, ist durch

with open(data) as f: 
    for line in f: 
     cells = line.strip().split() 
     # do something 

diese So halten Sie Ihre 16 GB Daten nicht mehrfach im Speicher (Python 2 und Python 3). Sie sollten auch versuchen, das vollständige Diktat zu vermeiden.

Verwandte Themen