Ich versuche, die Zeilen einer Textdatei in eine Liste oder ein Array in Python einzulesen. Ich muss nur in der Lage sein, einzeln auf jedes Element in der Liste oder im Array zuzugreifen, nachdem es erstellt wurde.
Die Textdatei ist wie folgt formatiert:
0,0,200,0,53,1,0,255,...,0.
Wo ...
oben ist, enthält die eigentliche Textdatei Hunderte oder Tausende weiterer Elemente.
Ich verwende den folgenden Code, um zu versuchen, die Datei in eine Liste einzulesen:
text_file = open("filename.dat", "r")
lines = text_file.readlines()
print lines
print len(lines)
text_file.close()
Die Ausgabe, die ich bekomme, ist:
['0,0,200,0,53,1,0,255,...,0.']
1
Anscheinend liest es die gesamte Datei in eine Liste von nur einem Element und nicht in eine Liste einzelner Elemente. Was mache ich falsch?
Antworten:
Sie müssen Ihre Zeichenfolge mit in eine Liste von Werten aufteilen
split()
So,
quelle
.csv
Datei (wie durch die OP erwähnt), beispielsweise eine Datei mit den Buchstaben 3 für Zeile , die (a,b,c
,d,e,f
usw.) und das Verfahren anwenden wie oben beschrieben , was man bekommt ist eine Liste wie diese:['a', 'b', 'c\nd', 'e', ... ]
(beachten Sie den Punkt'c\nd'
). Ich möchte hinzufügen, dass diese Prozedur, das obige Problem nicht zu übersehen, Daten aus einzelnen Zeilen in einer einzigen Mega-Liste zusammenfasst, normalerweise nicht das, was ich bei der Verarbeitung einer aufsatzorientierten Datendatei möchte.csv
Modul oder einen anderen vorhandenen ParserSie können auch numpy loadtxt like verwenden
quelle
dtype : data-type
Parameter anzugeben . docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html Pandas read_csv ist sehr einfach zu bedienen. Aber ich habe keine Möglichkeit gesehen, das Format dafür anzugeben. Es wurden Floats aus meiner Datei gelesen, während ich einen String brauchte. Danke @Thiru für das Anzeigen von loadtxt.Sie möchten also eine Liste von Listen erstellen ... Wir müssen mit einer leeren Liste beginnen
Als nächstes lesen wir den Dateiinhalt Zeile für Zeile
Ein häufiger Anwendungsfall sind Säulendaten. Unsere Speichereinheiten sind jedoch die Zeilen der Datei, die wir einzeln gelesen haben. Daher möchten Sie möglicherweise Ihre Listenliste transponieren . Dies kann mit der folgenden Redewendung erfolgen
Eine andere häufige Verwendung besteht darin, jeder Spalte einen Namen zu geben
Damit können Sie homogene Datenelemente bearbeiten
Das meiste, was ich geschrieben habe, kann mit dem
csv
Modul aus der Standardbibliothek beschleunigt werden . Ein weiteres Modul von Drittanbieternpandas
ermöglicht die Automatisierung der meisten Aspekte einer typischen Datenanalyse (weist jedoch eine Reihe von Abhängigkeiten auf).Update Während in Python 2
zip(*list_of_lists)
kehrt eine andere (umgesetzt) Liste von Listen, in Python 3 hat sich die Situation geändert undzip(*list_of_lists)
kehrt ein Zip - Objekt , das nicht subscriptable ist.Wenn Sie einen indizierten Zugriff benötigen , können Sie verwenden
Das gibt Ihnen eine Liste von Listen in beiden Versionen von Python.
Wenn Sie jedoch keinen indizierten Zugriff benötigen und nur ein Wörterbuch erstellen möchten, das durch Spaltennamen indiziert ist, ist ein Zip-Objekt in Ordnung ...
quelle
csv
Modul ...In dieser Frage wird gefragt, wie der durch Kommas getrennte Wertinhalt aus einer Datei in eine iterierbare Liste eingelesen werden kann:
0,0,200,0,53,1,0,255,...,0.
Der einfachste Weg, dies zu tun, ist mit dem
csv
Modul wie folgt:Jetzt können Sie einfach
spamreader
wie folgt iterieren :Weitere Beispiele finden Sie in der Dokumentation .
quelle