簡體   English   中英

使用緩沖讀取器來處理大型.csv文件,Python

[英]Using buffered reader for large .csv files, Python

我試圖在python腳本中打開大型.csv文件(16k行+,~15列),並且遇到了一些問題。

我使用內置的open()函數打開文件,然后使用輸入文件聲明一個csv.DictReader。 循環結構如下:

for (i, row) in enumerate(reader):
     # do stuff (send serial packet, read response)

但是,如果我使用超過大約20行的文件,文件將打開,但在幾次迭代中,我得到一個ValueError:對已關閉文件的I / O操作。

我的想法是我可能會耗盡內存(盡管16k行文件只有8MB,我有3GB內存),在這種情況下我希望我需要使用某種緩沖區來加載部分內存一次歸檔到內存中。

我是在正確的軌道上嗎? 或者是否有其他原因導致文件意外關閉?

編輯:大約一半的時間我使用11行的csv運行它,它給了我ValueError。 錯誤並不總是發生在同一行

16k行對於3GB Ram來說沒什么,最有可能你的問題是別的,例如你在其他一些干擾打開文件的過程中花費了太多時間。 只是為了確保速度,當你有3GB內存時,將整個文件加載到內存中,然后解析例如

import csv
import cStringIO
data = open("/tmp/1.csv").read()
reader = csv.DictReader(cStringIO.StringIO(data))
for row in reader:
    print row

在這至少你不應該得到文件打開錯誤。

csv_reader更快。 將整個文件作為塊讀取。 為了避免內存泄漏更好地使用子進程。 來自多處理導入過程

def child_process(name):
     # Do the Read and Process stuff here.if __name__ == '__main__':
     # Get file object resource.
      .....
     p = Process(target=child_process, args=(resource,))
     p.start()
     p.join()

有關更多信息,請通過此鏈接。 http://articlesdictionary.wordpress.com/2013/09/29/read-csv-file-in-python/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM