簡體   English   中英

編寫大型CSV文件-基於字典的CSV編寫器似乎是問題所在

[英]writing large CSV files - dictionary based CSV writer seems to be the problem

我有一個很大的單詞數組(單詞及其計數),需要將其寫入大型平面csv文件。

在用大約1000個左右的單詞進行測試時,這很好用-我按如下方式使用dictwriter:

self.csv_out = csv.DictWriter(open(self.loc+'.csv','w'), quoting=csv.QUOTE_ALL, fieldnames=fields)

其中fields是單詞列表(即我傳遞給csv_out.writerow的字典中的鍵)。

但是,這似乎在可怕地擴展,並且隨着字數的增加,寫入行所需的時間呈指數增長。 csvdict_to_list方法似乎是引起我麻煩的原因。

我不完全了解如何在此處進行優化? 我可以使用更快的CSV例程嗎?

好的,這絕不是答案,但我查找了csv模塊的源代碼,並注意到, if not檢入模塊,這將是非常昂貴的(python 2.6中的136-141節)。

if self.extrasaction == "raise":
    wrong_fields = [k for k in rowdict if k not in self.fieldnames]
    if wrong_fields:
        raise ValueError("dict contains fields not in fieldnames: " +
                         ", ".join(wrong_fields))
return [rowdict.get(key, self.restval) for key in self.fieldnames]

因此,一種快速的解決方法似乎是在創建extrasaction="ignore"時傳遞extrasaction="ignore" 這似乎大大加快了速度。

這不是一個完美的解決方案,也許有些明顯,但僅發布它對其他人會有幫助。

最明顯的優化是使用csv.writer而不是DictWriter ,為每行而不是字典傳遞可迭代對象。 這沒有幫助嗎?

當您說“字數”時,您是指CSV中的列數嗎? 因為我從未見過需要數千的CSV! 也許您已經轉置了數據並且正在寫列而不是行? 每一行應代表一個基准,各節由各列定義。 如果您確實需要這種大小,那么數據庫是一個更好的選擇?

暫無
暫無

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

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