gpt4 book ai didi

python - 如何使用 Python 的 csv 模块高效地将字典输出为 csv 文件?内存不足错误

转载 作者:太空狗 更新时间:2023-10-30 03:07:46 26 4
gpt4 key购买 nike

我正在尝试使用 Python 的 CSV 模块将字典列表序列化为 csv 文本文件。我的列表有大约 13,000 个元素,每个元素都是一本字典,有大约 100 个键,由简单的文本和数字组成。我的函数“dictlist2file”只是调用 DictWriter 来序列化它,但我遇到了内存不足的错误。

我的职能是:

def dictlist2file(dictrows, filename, fieldnames, delimiter='\t',
lineterminator='\n', extrasaction='ignore'):
out_f = open(filename, 'w')

# Write out header
if fieldnames != None:
header = delimiter.join(fieldnames) + lineterminator
else:
header = dictrows[0].keys()
header.sort()
out_f.write(header)

print "dictlist2file: serializing %d entries to %s" \
%(len(dictrows), filename)
t1 = time.time()
# Write out dictionary
data = csv.DictWriter(out_f, fieldnames,
delimiter=delimiter,
lineterminator=lineterminator,
extrasaction=extrasaction)
data.writerows(dictrows)
out_f.close()
t2 = time.time()
print "dictlist2file: took %.2f seconds" %(t2 - t1)

当我在我的字典上尝试这个时,我得到以下输出:

dictlist2file: serializing 13537 entries to myoutput_file.txt
Python(6310) malloc: *** mmap(size=45862912) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Traceback (most recent call last):
...
File "/Library/Frameworks/Python.framework/Versions/6.2/lib/python2.6/csv.py", line 149, in writerows
rows.append(self._dict_to_list(rowdict))
File "/Library/Frameworks/Python.framework/Versions/6.2/lib/python2.6/csv.py", line 141, in _dict_to_list
return [rowdict.get(key, self.restval) for key in self.fieldnames]
MemoryError

知道是什么原因造成的吗?该列表只有 13,000 个元素,字典本身非常简单和小(100 个键)所以我不明白为什么这会导致内存错误或效率如此低下。它需要几分钟才能到达内存错误。

感谢您的帮助。

最佳答案

DictWriter.writerows(...) 获取您传递给它的所有字典,并(在内存中)创建一个全新的列表列表,每行一个。因此,如果您有大量数据,我可以看到 MemoryError 会如何弹出。您可以通过两种方式继续:

  1. 自己遍历列表并为每个列表调用一次 DictWriter.writerow。尽管这将意味着大量写入。
  2. 将行分批放入较小的列表中,并为它们调用 DictWriter.writerows。更少的 IO,但可以避免分配大量内存。

关于python - 如何使用 Python 的 csv 模块高效地将字典输出为 csv 文件?内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3250236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com