Wie lese ich Zahlen in Textdateien mit Python?

7

Ich bin neu in der Python-Programmierung und lerne Python mit einfachen Programmen. Hier ist, was ich tun möchte: Wenn ich eine Textdatei mit Zahlen habe: sag das eine f1.txt

%Vor%

Ich möchte die erste Spalte in a1, die zweite in a2 und so weiter bekommen. Ich weiß oben Code kann falsch sein, bitte sagen Sie mir, wo ich falsch gelaufen bin und wie man es korrigiert. Besonders verstehe ich nicht den Befehl 'ln.strip (). Split ()'. Kann jemand helfen?

    
user3215074 22.01.2014, 14:30
quelle

4 Antworten

17

Du könntest es so machen:

%Vor%

Zuallererst verwenden wir die with Anweisung, um die Datei zu öffnen. Dadurch wird sichergestellt, dass die Datei automatisch geschlossen wird, auch wenn Fehler auftreten. Es ist einfach schöner. Während die Datei geöffnet ist, wird f das Dateihandle sein.

Nun erlaubt uns Python, über die Zeilen einer Datei zu iterieren, indem Sie einfach über das Datei-Handle iterieren. So wird for line in f automatisch über alle Zeilen iterieren. Es ist nicht notwendig, readlines() zuerst aufzurufen, und sicherlich nicht lines[0:len(lines)] , was im Grunde nur eine Kopie der Liste erstellt - Sie könnten einfach auch über lines iterieren.

Jetzt innerhalb der Schleife nehmen wir die Zeile und teilen sie durch Whitespace auf - ohne Argumente str.split wird das immer tun. str.split gibt eine Liste zurück, also speichern wir diese in einer zusätzlichen Variablen. Als nächstes hängen wir jede Spalte an die richtige Liste an. Und da Sie die Werte als Zahlen haben möchten, konvertieren wir sie in Ganzzahlen.

Die von Ihnen erwähnte str.strip entfernt grundsätzlich alle führenden oder nachgestellten Leerzeichen von die Saite. Da wir str.split ohne Argumente verwenden, werden zusätzliche Leerzeichen ebenfalls entfernt, also brauchen wir das nicht wirklich.

Schließlich ist es etwas lästig, vier getrennte Listen in separaten Variablen zu haben. Sie könnten stattdessen einfach eine Liste von Listen erstellen:

%Vor%

Und dann können Sie innerhalb der Schleife data[i] an a[i] anfügen:

%Vor%

Wenn Sie über enumerate iterieren, erhalten Sie nicht nur den Wert (den Sie würde beim Iterieren knapp über die Liste kommen, aber auch der Index. Wenn wir das verwenden, erhalten wir den Index jedes Elements innerhalb der geteilten Linie und können es automatisch an die richtige Unterliste von a anhängen.

    
poke 22.01.2014, 14:37
quelle
3
%Vor%

oder

%Vor%

BEARBEITEN: Um den Kommentar zu beantworten - Code unten wird die Daten als erforderliche Liste von Zahlen neu anzuordnen

%Vor%     
volcano 22.01.2014 14:39
quelle
0

line[0], line[1] usw. sollte Ihnen den ersten, zweiten usw. Eintrag in jeder Zeile geben.

Die Funktion split() teilt die angegebene Zeile in Leerzeichen auf und gibt eine Liste der Einträge zurück.

    
dornhege 22.01.2014 14:33
quelle
0

Ihr Einzug ist in der for -Schleife falsch. Der gesamte Code, der in der Schleife enthalten sein soll, sollte um 4 Leerzeichen eingerückt sein.

Die Zeile a1= line() wird nichts tun. Die Syntax a = A() würde a gleich dem Ergebnis einer Funktion A() oder einer neuen Instanz einer Klasse A setzen. Wenn Sie der Liste a1 eine Zeile hinzufügen möchten, müssen Sie a1.append(line)

verwenden     
IanAuld 22.01.2014 14:38
quelle

Tags und Links