Ich verwende Python (Django Framework), um eine CSV-Datei zu lesen. Ich ziehe nur 2 Zeilen aus dieser CSV heraus, wie Sie sehen können. Ich habe versucht, die Gesamtzahl der Zeilen der CSV in einer Variablen zu speichern.
Wie kann ich die Gesamtzahl der Zeilen ermitteln?
file = object.myfilePath
fileObject = csv.reader(file)
for i in range(2):
data.append(fileObject.next())
Ich habe versucht:
len(fileObject)
fileObject.length
file_read
? Ist es ein Dateihandle (wie infile_read = open("myfile.txt")
?Antworten:
Sie müssen die Anzahl der Zeilen zählen:
Die Verwendung
sum()
mit einem Generatorausdruck sorgt für einen effizienten Zähler und vermeidet das Speichern der gesamten Datei im Speicher.Wenn Sie zu Beginn bereits 2 Zeilen gelesen haben, müssen Sie diese 2 Zeilen zu Ihrer Gesamtsumme hinzufügen. Bereits gelesene Zeilen werden nicht gezählt.
quelle
\x1A
Zeichen ( STRG-Z )? Wie haben Sie die Datei geöffnet ?file.seek(0)
thenfileObject = csv.reader(file)
2018-10-29 EDIT
Vielen Dank für die Kommentare.
Ich habe verschiedene Arten von Code getestet, um die Anzahl der Zeilen in einer CSV-Datei in Bezug auf die Geschwindigkeit zu ermitteln. Die beste Methode ist unten.
Hier ist der Code getestet.
Das Ergebnis war unten.
Zusammenfassend
sum(1 for line in f)
ist am schnellsten. Aber es könnte keinen signifikanten Unterschied zu gebenlen(f.readlines())
.sample_submission.csv
ist 30,2 MB groß und hat 31 Millionen Zeichen.quelle
for row in csv_reader:
Lösung bevorzugen , wenn die CSV gültige zitierte Zeilenumbrüche gemäß rfc4180 enthalten soll . @dixhom Wie groß war die Datei, die Sie getestet haben?Dazu benötigen Sie ein bisschen Code wie in meinem Beispiel hier:
Ich hoffe das hilft allen.
quelle
%time sum(1 for row in open("df_data_raw.csv"))
kosten 4,91%time len(open("df_data_raw.csv").readlines())
Sekunden , für 14,6 Sekunden.Einige der oben genannten Vorschläge zählen die Anzahl der Zeilen in der CSV-Datei. Einige CSV-Dateien enthalten jedoch Zeichenfolgen in Anführungszeichen, die selbst Zeilenumbrüche enthalten. MS CSV-Dateien begrenzen Datensätze normalerweise mit \ r \ n, verwenden jedoch \ n allein in Anführungszeichen.
Bei einer Datei wie dieser führt das Zählen von Textzeilen (wie durch eine neue Zeile begrenzt) in der Datei zu einem zu großen Ergebnis. Für eine genaue Zählung müssen Sie also csv.reader verwenden, um die Datensätze zu lesen.
quelle
Zuerst müssen Sie die Datei mit open öffnen
Verwenden Sie dann den csv.reader, um den csv zu öffnen
Zuletzt können Sie die Anzahl der Zeilen mit der Anweisung 'len' eingeben.
Der Gesamtcode lautet wie folgt:
Denken Sie daran, dass Sie, wenn Sie die CSV-Datei wiederverwenden möchten, eine input_file.fseek (0) erstellen müssen, da bei Verwendung einer Liste für die reader_file alle Dateien gelesen werden und der Zeiger in der Datei seine Position ändert
quelle
row_count = sum(1 for line in open(filename))
arbeitete für mich.Hinweis:
sum(1 for line in csv.reader(filename))
scheint die Länge der ersten Zeile zu berechnenquelle
quelle
file_read
offenbar ist eincsv.reader()
Objekt, so dass es nicht hat einereadlines()
Methode..readlines()
muss eine möglicherweise große Liste erstellen, die Sie dann wieder verwerfen.Wenn Sie ein csv.reader-Objekt instanziieren und die gesamte Datei iterieren, können Sie auf eine Instanzvariable namens line_num zugreifen, die die Zeilenanzahl angibt:
quelle
quelle
Verwenden Sie "Liste", um ein funktionsfähigeres Objekt anzupassen.
Sie können dann zählen, überspringen, mutieren, bis Ihr Herz es wünscht:
quelle
Sie können auch eine klassische for-Schleife verwenden:
quelle
Vielleicht möchten Sie etwas so Einfaches wie unten in der Befehlszeile ausprobieren:
sed -n '$=' filename
oderwc -l filename
quelle
Dies funktioniert für CSV und alle Dateien, die Zeichenfolgen in Unix-basierten Betriebssystemen enthalten:
Falls die CSV-Datei eine Feldzeile enthält, können Sie eine von
numOfLines
oben abziehen :quelle
Ich denke, wir können die beste Antwort ein wenig verbessern, ich benutze:
Darüber hinaus sollten wir nicht vergessen, dass Python-Code nicht immer die beste Leistung im Projekt hat. Beispiel: Wenn wir mehr Operationen gleichzeitig im selben Datensatz ausführen können, ist es besser, alle im selben Bucle auszuführen, anstatt zwei oder mehr pythonische Bucles zu erstellen.
quelle
Versuchen
und in der Ausgabe sehen Sie so etwas wie (aa, bb), wobei aa die Anzahl der Zeilen ist
quelle
data.shape[0]
quelle