如何在 Python 2.7 中有效處理大型 CSV 檔案?

Mary-Kate Olsen
發布: 2024-11-08 03:32:02
原創
544 人瀏覽過

How to Effectively Handle Large CSV Files in Python 2.7?

在Python 中讀取大型.csv 檔案

問題:在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
登入後複製

其他速度提示:

  • 使用帶有區塊大小參數的csv.reader:
  • 以較小的區塊讀取檔案以減少記憶體佔用。
  • 考慮使用資料庫引擎:
  • 如果資料合適,將其儲存在資料庫中,以便更快、更有效率的處理。

以上是如何在 Python 2.7 中有效處理大型 CSV 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!