問題:在Python 中讀取大量.csv 檔案(最多100 萬行,
在Python 中讀取大量.csv 檔案(最多100 萬行, 200 列) 2.7 遇到記憶體錯誤。 最初的方法是迭代整個檔案並將資料作為列表儲存在記憶體中。然而,這種方法對於大檔案來說是不切實際的,因為它會消耗過多的記憶體。解決方案:
1.在產生行時處理:
避免將整個檔案載入到內存中。相反,處理使用生成器函數產生的行。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.使用生成器函數過濾:
使用生成器函數迭代檔案時過濾資料。此方法允許匹配滿足特定條件的多個連續行。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() 以使用生成器函數,確保在任何時候記憶體中只保留一行。def getdata(filename, criteria): for criterion in criteria: for row in getstuff(filename, criterion): yield row
其他速度提示:
以上是如何在 Python 2.7 中有效處理大型 CSV 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!