Ich versuche, einige bestimmte Zeilen einer großen CSV-Datei zu lesen, und ich möchte nicht die gesamte Datei in den Speicher laden. Der Index der spezifischen Zeilen werden in einer Liste angegeben L = [2, 5, 15, 98, ...]
und meine CSV-Datei sieht wie folgt aus:So lesen Sie bestimmte Zeilen einer großen CSV-Datei
Col 1, Col 2, Col3
row11, row12, row13
row21, row22, row23
row31, row32, row33
...
die Ideen Mit here erwähnte ich den folgenden Befehl verwenden, um die Zeilen
with open('~/file.csv') as f:
r = csv.DictReader(f) # I need to read it as a dictionary for my purpose
for i in L:
for row in enumerate(r):
print row[i]
ich sofort zu lesen erhalten den folgenden Fehler:
IndexError Traceback (most recent call last)
<ipython-input-25-78951a0d4937> in <module>()
6 for i in L:
7 for row in enumerate(r):
----> 8 print row[i]
IndexError: tuple index out of range
Frage 1. Es ist wie meine Verwendung derscheintSchleifen ist hier offensichtlich falsch. Irgendwelche Ideen, wie das zu beheben ist?
Auf der anderen Seite erhält die folgenden den Job zu erledigen, aber es ist zu langsam:
def read_csv_line(line_number):
with open("~/file.csv") as f:
r = csv.DictReader(f)
for i, line in enumerate(r):
if i == (line_number - 2):
return line
return None
for i in L:
print read_csv_line(i)
Frage 2. Jede Idee, wie man durch die ganze Datei zu gehen, bis ich diese grundlegende Methode zur Verbesserung des Zeile erreichen, dann drucke ich es?
Danke, endlich habe ich etwas ähnliches getan. Der Haken war, dass meine Liste L bereits bestellt war und ich nicht wirklich jedes Mal die Mitgliedschaft überprüfen musste. Ich habe nur überprüft, ob 'i == L [0]', und dann den ersten Eintrag von 'L' weggelassen. Um das Lesen der ganzen Datei zu vermeiden, hat @vlad oben eine Lösung gefunden. – Keivan