Wir haben eine große Rohdatendatei, die wir auf eine bestimmte Größe zuschneiden möchten. Ich habe Erfahrung mit .net c #, möchte dies jedoch in Python tun, um die Dinge zu vereinfachen und aus Interesse.
Wie würde ich vorgehen, um die ersten N Zeilen einer Textdatei in Python abzurufen? Wird das verwendete Betriebssystem Auswirkungen auf die Implementierung haben?
Antworten:
Python 2
Python 3
Hier ist ein anderer Weg (sowohl Python 2 als auch 3)
quelle
quelle
f = open("file")
ausnahmslos die Behandlung sehe , um die Datei zu schließen. Die pythonische Art, mit Dateien umzugehen, ist mit einem Kontextmanager, dh mit der with-Anweisung. Dies wird im Python-Tutorial zur Eingabe und Ausgabe behandelt ."It is good practice to use the with keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way."
Wenn Sie die ersten Zeilen schnell lesen möchten und sich nicht um die Leistung kümmern, können Sie
.readlines()
das Listenobjekt "return" verwenden und dann die Liste aufteilen.ZB für die ersten 5 Zeilen:
Ein Vorteil gegenüber den anderen Antworten ist die Möglichkeit, den Zeilenbereich einfach auszuwählen, z. B. die ersten 10 Zeilen
[10:30]
oder die letzten 10 Zeilen zu überspringen[:-10]
oder nur gerade Zeilen zu nehmen[::2]
.quelle
Was ich tue, ist, die N Leitungen mit aufzurufen
pandas
. Ich denke, die Leistung ist nicht die beste, aber zum Beispiel, wennN=1000
:quelle
nrows
Option zu verwenden, die auf 1000 gesetzt werden kann und nicht die gesamte Datei lädt. pandas.pydata.org/pandas-docs/stable/generated/… Im Allgemeinen verfügt pandas über diese und andere speichersparende Techniken für große Dateien.sep
, um einen Spaltenbegrenzer zu definieren (der in einer Nicht-CSV-Datei nicht vorkommen sollte)pandas.read()
Funktion in der Dokumentation nicht finden. Kennen Sie Informationen zu diesem Thema?Es gibt keine spezielle Methode zum Lesen der Anzahl der Zeilen, die vom Dateiobjekt angezeigt werden.
Ich denke, der einfachste Weg wäre folgender:
quelle
Basierend auf der Antwort von Gnibbler (20. November 09 um 0:27 Uhr): Diese Klasse fügt dem Dateiobjekt die Methoden head () und tail () hinzu.
Verwendung:
quelle
Die zwei intuitivsten Möglichkeiten hierfür wären:
Durchlaufen Sie die Datei Zeile für Zeile und
break
nachN
Zeilen.Durchlaufen Sie die Datei Zeile für Zeile mit den
next()
MethodenzeitenN
. (Dies ist im Wesentlichen nur eine andere Syntax für die Top-Antwort.)Hier ist der Code:
Unter dem Strich haben Sie viele Optionen , solange Sie nicht die gesamte Datei verwenden
readlines()
oderenumerate
in den Speicher legen.quelle
der bequemste Weg für sich allein:
Lösung basierend auf Listenverständnis Die Funktion open () unterstützt eine Iterationsschnittstelle. Das enumerate () deckt open () ab und gibt Tupel (Index, Element) zurück. Dann überprüfen wir, ob wir uns innerhalb eines akzeptierten Bereichs befinden (wenn i <LINE_COUNT) und drucken dann einfach das Ergebnis.
Genieße den Python. ;)
quelle
[next(file) for _ in range(LINE_COUNT)]
.Für die ersten 5 Zeilen machen Sie einfach:
quelle
Wenn Sie etwas wollen, das offensichtlich (ohne esoterische Inhalte in Handbüchern nachzuschlagen) ohne Importe funktioniert, versuchen Sie es / ausgenommen und arbeiten Sie mit einer Reihe von Python 2.x-Versionen (2.2 bis 2.6):
quelle
Wenn Sie eine wirklich große Datei haben und davon ausgehen, dass die Ausgabe ein numpy-Array sein soll, friert die Verwendung von np.genfromtxt Ihren Computer ein. Das ist meiner Erfahrung nach so viel besser:
quelle
Ab Python 2.6 können Sie komplexere Funktionen in der IO-Basisklasse nutzen. Die oben am besten bewertete Antwort kann also wie folgt umgeschrieben werden:
(Sie müssen sich keine Sorgen machen, dass Ihre Datei weniger als N Zeilen enthält, da keine StopIteration-Ausnahme ausgelöst wird.)
quelle
lines
aber das Argument bezieht sich aufbytes
.Das hat bei mir funktioniert
quelle
Dies funktioniert für Python 2 & 3:
quelle
quelle
Diese Methode hat bei mir funktioniert
quelle