![](/img/trans.png)
[英]Python: csv_writer writing 1 number in separate cells problem
[英]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
的字典中的鍵)。
但是,這似乎在可怕地擴展,並且隨着字數的增加,寫入行所需的時間呈指數增長。 csv
的dict_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.