
在Python 中讀取大型.csv 檔案
問題:在Python 中讀取大量.csv 檔案(最多100 萬行,
在Python 中讀取大量.csv 檔案(最多100 萬行, 200 列) 2.7 遇到記憶體錯誤。
最初的方法是迭代整個檔案並將資料作為列表儲存在記憶體中。然而,這種方法對於大檔案來說是不切實際的,因為它會消耗過多的記憶體。
解決方案:
1.在產生行時處理:
避免將整個檔案載入到內存中。相反,處理使用生成器函數產生的行。
1 2 3 4 5 6 7 | def getstuff(filename, criterion):
with open(filename, "rb" ) as csvfile:
datareader = csv.reader(csvfile)
yield next(datareader) # yield the header row
for row in datareader:
if row[3] == criterion:
yield row
|
登入後複製
2.使用生成器函數過濾:
使用生成器函數迭代檔案時過濾資料。此方法允許匹配滿足特定條件的多個連續行。
1 2 3 4 5 6 7 8 | def getstuff(filename, criterion):
with open(filename, "rb" ) as csvfile:
datareader = csv.reader(csvfile)
yield next(datareader) # yield the header row
yield from takewhile(
lambda r: r[3] == criterion,
dropwhile(lambda r: r[3] != criterion, datareader))
return
|
登入後複製
3.最佳化記憶體消耗:
重構 getdata() 以使用生成器函數,確保在任何時候記憶體中只保留一行。
1 2 3 4 | def getdata(filename, criteria):
for criterion in criteria:
for row in getstuff(filename, criterion):
yield row
|
登入後複製
其他速度提示:
-
使用帶有區塊大小參數的csv.reader:
以較小的區塊讀取檔案以減少記憶體佔用。 -
考慮使用資料庫引擎:
如果資料合適,將其儲存在資料庫中,以便更快、更有效率的處理。
以上是如何在 Python 2.7 中有效處理大型 CSV 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!