我正在打開一個大的CSV文件,並且在將數據插入數組的過程中出現MemoryError。所以,我怎麼可以讀取CSV文件的特定行(例如,從第1行至10000)在Python中讀取特定的CSV行
這裏是代碼:
datafile=open('test.csv','r')
datareader=csv.reader(datafile,delimiter=';')
for row in datareader:
MyArray.append(row)
我正在打開一個大的CSV文件,並且在將數據插入數組的過程中出現MemoryError。所以,我怎麼可以讀取CSV文件的特定行(例如,從第1行至10000)在Python中讀取特定的CSV行
這裏是代碼:
datafile=open('test.csv','r')
datareader=csv.reader(datafile,delimiter=';')
for row in datareader:
MyArray.append(row)
我會使用islice
代替enumerate
:
from itertools import islice
# First 10000
MyArray.extend(islice(datareader, 10000))
# Or, specify start/stop ranges (10000-20000 (non inclusive))
MyArray.extend(islice(datareader, 10000, 20000))
# Or read in chunks of 10k
for chunk in iter(lambda: list(islice(datareader, 10000)), []):
# do something with 10k rows
哦,更好。我以前從來沒有用過'islice',但這絕對是一個完美的例子。 @ user3636424,您可能想要接受此答案。 – 2014-09-23 09:48:27
@Tim我不會對接受/代表感興趣 - 只是開心對某人有用:) – 2014-09-23 09:53:38
謝謝你們兩位。 – pafpaf 2014-09-23 09:59:30
使用enumerate()
:
for i, row in enumerate(datareader):
MyArray.append(row)
if i == 10000:
break
,或者任何範圍:
start = 1000
stop = 2000
for i, row in enumerate(datareader):
if i < start:
continue # skip this row
elif i > stop:
break # abort the loop
else: # ("else" is not strictly necessary here, but more explicit)
MyArray.append(row)
謝謝,它正在工作 – pafpaf 2014-09-23 09:36:18
你的csv文件有多大? – 2014-09-23 09:29:44
爲什麼要將行放入一個數組('list'?'np.array'?),而不是迭代它們?你想達到什麼目的? – jonrsharpe 2014-09-23 09:30:40
Tim的答案效果不錯,它大於1GB,大約9百萬行。我需要的數據內容在線(這是網絡包) – pafpaf 2014-09-23 09:38:44